题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/\ /\
5 7 9 11
输出8 6 10 5 7 9 11。
比较简单的一道题目,思路是遍历一个结点时,首先访问它,然后将它的左右子树放入队列中。
ps:今天的数模B题好纠结....郁闷中.........
//利用队列实现从根到叶的遍历 #include<iostream> #include<queue> using namespace std; struct treenode{ int data; treenode *l; treenode *r; }; treenode* create(void){ treenode *tree=new treenode; tree->data=8; tree->l=new treenode; tree->l->data=6; tree->l->l=new treenode; tree->l->l->data=5; tree->l->l->l=NULL; tree->l->l->r=NULL; tree->l->r=new treenode; tree->l->r->data=7; tree->l->r->l=NULL; tree->l->r->r=NULL; tree->r=new treenode; tree->r->data=10; tree->r->l=new treenode; tree->r->l->data=9; tree->r->l->l=NULL; tree->r->l->r=NULL; tree->r->r=new treenode; tree->r->r->data=11; tree->r->r->l=NULL; tree->r->r->r=NULL; return tree; } void print(treenode *tree){ queue<treenode *> my_queue; if(!tree) return; my_queue.push(tree); while(!my_queue.empty()){ treenode *now=my_queue.front(); my_queue.pop(); cout<<now->data<<" "; if(now->l) my_queue.push(now->l); if(now->r) my_queue.push(now->r); } cout<<endl; } int main(void){ print(create()); system("pause"); return 0; }