题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
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;
}