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

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

/ \  
6 10 
/\ /\  
5 7 9 11 
输出8 6 10 5 7 9 11。

思路:广度优先遍历

#include <iostream>
#include <deque>
using namespace std;

struct BTree
{
    BTree* pLeft;
    BTree* pRight;
    int value;
};
void InsertBTree(BTree* &pRoot, int val)
{
    if (!pRoot)
    {
        pRoot=new BTree;
        pRoot->pLeft=NULL;
        pRoot->pRight=NULL;
        pRoot->value=val;
    }
    else
    {
        if (val>pRoot->value)
        {
            InsertBTree(pRoot->pRight,val);
        }
        if (val<pRoot->value)
        {
            InsertBTree(pRoot->pLeft,val);
        }
        if (val==pRoot->value)
        {
            cout<<"repeated insertion."<<endl;
        }
    }
}
void VisitByLevel(BTree* pRoot)
{
    if (!pRoot)
    {
        return;
    }
    deque<BTree*> BTDeque;
    BTDeque.push_back(pRoot);
    while (BTDeque.size())
    {
        BTree* p=BTDeque.front();
        cout<<p->value<<"  ";
        BTDeque.pop_front();
        if (p->pLeft)
        {
            BTDeque.push_back(p->pLeft);
        }
        if (p->pRight)
        {
            BTDeque.push_back(p->pRight);
        }
    }
}
void main()
{
    BTree* pRoot=NULL;
    InsertBTree(pRoot,8);
    InsertBTree(pRoot,6);
    InsertBTree(pRoot,10);
    InsertBTree(pRoot,5);
    InsertBTree(pRoot,7);
    InsertBTree(pRoot,9);
    InsertBTree(pRoot,11);
    VisitByLevel(pRoot);
}

 

posted @ 2013-01-03 14:48  lscheng  阅读(766)  评论(0编辑  收藏  举报