二叉树的层次遍历(c++)
日期: 2020-08-13 分类: 跨站数据测试 328次阅读
层次遍历 :对于一颗二叉树,从根结点开始,按从上到下,从左到右的顺序访问每一个结点
思路
使用队列
1,将根结点入队
2,队不为空时循环:出列一个结点,打印它
①有左孩子,将左孩子入队
②有右孩子,将右孩子入队
#include<iostream>
#include<queue>
using namespace std;
typedef struct TriTNode{
struct TriTNode *lchild;
struct TriTNode *rchild;
char Node;
}BiTNode,*BiTree;
void levelOrder(BiTNode *root)
{
BiTNode *p=root;
queue<BiTNode*> qu;//初始化队列
qu.push(p);//根结点入队
while(!qu.empty())//队非空循环
{
p=qu.front();//出队,队内第一个元素
qu.pop();//首元素出队
cout<<p->Node;//打印
if(p->lchild!=NULL) qu.push(p->lchild);//左孩子入队
if(p->rchild!=NULL) qu.push(p->rchild);//右孩子入队
}
}
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->Node=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int main()
{
BiTree T;
cout<<"请输入"<< endl;
CreateBiTree(T);
cout << "二叉树创建完成!"<<endl;
cout<<"二叉树层次遍历为"<<endl;
levelOrder(T);
return 0;
}
//例:abc##de###fg#h### ->abfcdgeh
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐