题目描述:
二叉树采用先序的方式建立,结点类型为字符型,二叉树对应扩展二叉树表示“空”的结点用“#”表示。请按从左到右的顺序输出第i层上所有的结点,如果i比二叉树的层数大,输出NULL。
输入样例:
A B D F # # # E # G # # C H I # # J # # #235
输出样例:
B CD E HNULL
输入描述:
第一行按先序输入二叉树对应扩展二叉树的先序遍历序列,每个字符之间以空格隔开,接下来三行输入三个整型数。
输出描述:
按从左到右的顺序输出每个整数所表示的二叉树层号所对应的结点数据,每个结点输出一行,结点之间以空格隔开。
#include <iostream> using namespace std; typedef char T; struct node { T data; node *lchild,*rchild; }; class tree { public: tree(){root=set(root);} ~tree(){release(root);} int deep(){int a;a=deep(root);return a;} void level(int d){level(root,d);} protected: node *root;T ch; node* set(node *bt)//建树 { cin>>ch; if(ch=='#') bt=NULL; else { bt=new node; bt->data=ch; bt->lchild=set(bt->lchild); bt->rchild=set(bt->rchild); } return bt; } void release(node *bt)//析构 { if (bt!=NULL) { release(bt->lchild); release(bt->rchild); delete bt; } } int deep(node *bt)//二叉树深度 { int ld,rd; if(bt==NULL) return 0; else { ld=deep(bt->lchild); rd=deep(bt->rchild); if(ld>rd) return ld+1; else return rd+1; } } void level(node *bt,int L)//输出 { if(bt==NULL)return; if(L==1) cout<<bt->data<<" "; else { level(bt->lchild,L-1); level(bt->rchild,L-1); } } }; int main() { tree t;int x;int f;int i=3; f=t.deep(); while (i--) { cin>>x; if(x>f) { cout<<"NULL"<<endl; break; } else { t.level(x); cout<<endl; } } return 0; }