1. 程式人生 > >程式設計師面試一百題-12-從上往下遍歷二元樹

程式設計師面試一百題-12-從上往下遍歷二元樹

1-題目 :
輸入一棵二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。

2-示例 :
輸入以下二元樹,輸出10 7 15 5 8
二元樹

3-思路 :
資料結構是佇列,本質是在二元樹上實現廣度優先遍歷

4-程式碼 :

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

//定義二元樹的結點
struct BTreeNode
{
    int value;
    BTreeNode *pLeft;
    BTreeNode *pRight;
};

void PrintFromTopToBottom(BTreeNode *pTreeRoot)
{
    if (!pTreeRoot)
    {
        return;
    }
    
    //建立一個空佇列
    deque<BTreeNode *> dequeTreeNode;

    //將根結點插入隊尾
    //從根結點開始,滿足題目從上到下的要求
    dequeTreeNode.push_back(pTreeRoot);

    //當佇列不為空
    while (dequeTreeNode.size())
    {
        //獲取隊頭的結點,列印該結點並讓其出列
        BTreeNode *pNode = dequeTreeNode.front();
        cout << pNode->value;
        dequeTreeNode.pop_front();

        //若該結點左右子樹不為空,則遞迴
        //先左後右,滿足題目從左到右的要求
        if (pNode->pLeft)
        {
            dequeTreeNode.push_back(pNode->pLeft);
        }
        if (pNode->pRight)
        {
            dequeTreeNode.push_back(pNode->pRight);
        }
    }
}