描述
利用先序递归遍历算法创建二叉树并输出该二叉树的层次遍历序列。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树的层次遍历序列。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。
input
输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。
output
每个用例用一行出该用例对应的二叉树的层次遍历序列。
样例输入
A##
ABC####
AB##C##
ABCD###EF##G##H##
A##B##
样例输出
A
ABC
ABC
ABHCEDFG
A
这道题非常简单,直观的看就是输出每一排的数据,解决方案就是先将根节点入队列,然后当队列不空时就将队头元素出队输出,并将其孩子节点入队,如此循环。
代码如下
1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 5 typedef struct node{ 6 char data; 7 node*lchild,*rchild; 8 }BiNode,*BiTree; 9 10 BiTree create(){ 11 char ch; 12 BiTree T; 13 cin>>ch; 14 if(ch=='#'){ 15 T=NULL; 16 }else{ 17 T=new BiNode; 18 T->data=ch; 19 T->lchild=create(); 20 T->rchild=create(); 21 } 22 return T; 23 } 24 void visit(BiTree T){ 25 cout<<T->data; 26 } 27 void bianli(BiTree T){ 28 if(T==NULL)return; 29 bianli(T->lchild); 30 visit(T); 31 bianli(T->rchild); 32 } 33 void cxbl(BiTree T){ 34 queue<BiTree>q; 35 q.push(T); 36 BiTree p; 37 while(!q.empty()){ 38 cout<<q.front()->data; 39 p=q.front(); 40 q.pop(); 41 if(p->lchild!=NULL){q.push(p->lchild); 42 } 43 if(p->rchild!=NULL){q.push(p->rchild); 44 } 45 } 46 } 47 int main(){ 48 BiTree Tree=create(); 49 cxbl(Tree); 50 return 0; 51 }