从上往下遍历二元树

题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

例如输入

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;
}
 

posted @ 2011-02-11 23:26  akawhy  阅读(560)  评论(0编辑  收藏  举报