分层打印二叉树

 题目:给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序从左到右。

答:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

struct TreeNode 
{
    int m_nValue;
    TreeNode *m_pLeft;
    TreeNode *m_pRight;
};

//假定所创建的二叉树如下图所示
/*
                                             1
                                          /     \
                                         2       3
                                        / \      / 
                                       4   3    6
                                      / \   \  / \
                                     7   8  9  10 11
                                    /     \
                                   12      13
                                          /
                                         14
*/
void CreateBitree(TreeNode *&pNode, fstream &fin)
{
    int dat;
    fin>>dat;
    if(dat == 0)
    {
        pNode = NULL;
    }
    else 
    {
        pNode = new TreeNode();
        pNode->m_nValue = dat;
        pNode->m_pLeft = NULL;
        pNode->m_pRight = NULL;
        CreateBitree(pNode->m_pLeft, fin);      
        CreateBitree(pNode->m_pRight, fin); 
    }
}

void PrintTreeByLevel(TreeNode *pHead)
{
    if (NULL == pHead)
    {
        return;
    }
    vector<TreeNode*> vec;
    vec.push_back(pHead);int cur = 0;
    int last = 0;
    while(cur < vec.size())
    {
        last = vec.size();
        while (cur < last)
        {
            cout<<vec[cur]->m_nValue<<"  ";
            if (NULL != vec[cur]->m_pLeft)
            {
                vec.push_back(vec[cur]->m_pLeft);
            }
            if (NULL != vec[cur]->m_pRight)
            {
                vec.push_back(vec[cur]->m_pRight);
            }
            cur++;
        }
        cout<<endl;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    fstream fin("tree.txt");
    TreeNode *pHead = NULL;
    CreateBitree(pHead, fin);
    PrintTreeByLevel(pHead);
    return 0;
}

运行界面如下:

posted @ 2012-09-02 17:09  venow  阅读(5095)  评论(0编辑  收藏  举报