1 Star 0 Fork 0

原嘉怡/数据结构

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
jmu-ds-输出二叉树每层节点 .cpp 1.72 KB
一键复制 编辑 原始数据 按行查看 历史
原嘉怡 提交于 2021-05-01 10:19 +08:00 . 重命名 栈 为 数据结构
#include <iostream>
#include <string>
#include <queue>
using namespace std;
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode* lchild, * rchild;
}*BTree, BiTree;
BTree CreatTree(string str, int& i);//建树
void LevelOrder(BTree bt);//层次遍历
int main()
{
int i = 0;
string str;
cin >> str;
BTree bt = CreatTree(str, i);
LevelOrder(bt);
return 0;
}
BTree CreatTree(string str, int& i)//建树
{
BTree bt;
if (str[i] == '#')
return NULL;
if (i > str.size() - 1)
return NULL;
bt = new BiTree;
bt->data = str[i];
bt->lchild = CreatTree(str, ++i);
bt->rchild = CreatTree(str, ++i);
return bt;
}
void LevelOrder(BTree bt)//层次遍历
{
int level = 0;//层数
int flag = 0;//判断是否为第一层结点
BTree node, lastNode; //分别用于存放遍历中途结点的孩子结点并判断是否找到这一层的最后一个结点
node = lastNode = bt;
BTree p;
p = new BiTree;
p->lchild = NULL;
p->rchild = NULL;
queue<BTree>qtree;//存放结点
if (bt != NULL)//二叉树不为空
qtree.push(bt);
else//二叉树为空
{
cout << "NULL";
return;
}
while (!qtree.empty())//队列不空
{
if (node == lastNode)//若找到这一层的最后一个结点
{
level++;//层层递增
if (flag == 0)
{
cout << level << ":";
flag = 1;//将flag置为1,即只在第一次循环时输出1
}
else
{
cout << endl;
cout << level << ":";
}
lastNode = qtree.back();//取队尾元素
}
node = qtree.front();
cout << node->data << ",";
//左右孩子入队
if (node->lchild)
qtree.push(node->lchild);
if (node->rchild)
qtree.push(node->rchild);
qtree.pop();
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yuan-jiayi/data-structure-stack-and-queue.git
git@gitee.com:yuan-jiayi/data-structure-stack-and-queue.git
yuan-jiayi
data-structure-stack-and-queue
数据结构
master

搜索帮助