层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。
建树方法采用“先序遍历+空树用0表示”的方法
要求:采用队列对象实现,函数框架如下:
层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。
建树方法采用“先序遍历+空树用0表示”的方法
要求:采用队列对象实现,函数框架如下:
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
逐行输出每个二叉树的层次遍历结果
#include<iostream> #include<string> #include<queue> using namespace std; class BiTreeNode { public: char data; BiTreeNode *Left; BiTreeNode *Right; BiTreeNode() { Left=NULL; Right=NULL; } ~BiTreeNode() { delete Left; delete Right; } }; class BiTree { public: BiTreeNode *Root; int pos; string strTree; BiTree(string str) { pos=0; strTree=str; Root=CreateBiTree(); } BiTreeNode *CreateBiTree() { char ch=strTree[pos]; pos++; if(ch==‘0‘) { return NULL; } else { BiTreeNode *T; T=new BiTreeNode(); T->data=ch; T->Left=CreateBiTree(); T->Right=CreateBiTree(); return T; } } void LevelOrder() { queue<BiTreeNode*>Q; if(Root==NULL) return; Q.push(Root); while(!Q.empty()) { BiTreeNode *temp=Q.front(); cout<<temp->data; if(temp->Left!=NULL) Q.push(temp->Left); if(temp->Right!=NULL) Q.push(temp->Right); Q.pop(); } } }; int main() { int T; cin>>T; while(T--) { string str; cin>>str; BiTree tree(str); tree.LevelOrder(); cout<<endl; } return 0; }
原文:https://www.cnblogs.com/SZU-DS-wys/p/12180807.html