输出第i层上所有顶点的数据

题目描述:


二叉树采用先序的方式建立,结点类型为字符型,二叉树对应扩展二叉树表示“空”的结点用“#”表示。请按从左到右的顺序输出第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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值