從上往下列印二叉樹

2022-08-21 08:33:11 字數 1807 閱讀 8182

【題目】

從上往下列印出二叉樹的每乙個結點,同一層的結點依照從左到右的順序列印。比如:

列印結果:8。6,10,5,7,9,11。

【分析】

二叉樹遍歷方式:前序。中序。後序,另一種廣度優先遍歷。在對圖遍歷時涉及到,而二叉樹能夠看作退化的圖,從樣例中能夠看出,列印順序是按層決定的,觀察發現,列印完根節點之後,然後列印其左右節點。再繼續列印左節點的左右孩子和右結點的左右孩子。由此能夠發現,假設將其結點的左右孩子放在乙個容器內,列印父節點後。再取其孩子依次列印,舉上述樣例進行說明:

1.列印8後。將6,10放在容器內。

2.列印6,將5,7放在容器內;

3.列印10。將9,11放入容器內;

4.列印5,5為葉子結點,沒有左右孩子,故列印容器內下乙個元素7,這樣依次列印出9,11。

由上述可觀察到。先進容器的先列印。先入先出的模式。而資料結構中佇列就是這樣的模式,所以這個容器採用佇列模式,可是和普通佇列略有不同,要注意到佇列的元素儲存的是乙個二叉樹結點。存在左右孩子成員,所以這裡最好用陣列佇列,當然。鍊錶佇列也是能夠,可是指標方面相對複雜一點。

由此,總結思路例如以下所看到的:

1、根節點進入佇列。

2、列印根節點。左右孩子進入佇列;

3、迴圈第二步,直至佇列中沒有元素進入了。

【測試**】

//從上往下列印二叉樹(層序遍歷,廣度優先遍歷)

#include

#include

using

namespace

std;

struct binarytreenode

;binarytreenode* createbinarytreenode(int value)

void connectbinarytreenode(binarytreenode* pparent, binarytreenode* pleftchild,

binarytreenode* prightchild)

void printtreefromtoptobottom(binarytreenode* proot)

}void test()

int main()

【輸出】

【程式說明】

1.對於本題來說,假設純用c來實現,將會耗費非常大工作量,而考慮到現有編譯器c和c++皆是相容的,所以,最好還是利用c++封裝庫的優勢,在c++庫中存在佇列。在這裡僅僅需加上

#include

但這裡須要注意,想要用c++庫一定要加

using namespace std;

queue

btnqueue;

初始化佇列,元素型別為binarytreenode*。佇列名btnqueue

btnqueue.push(proot)
將根節點壓入佇列

btnqueue.pop()
出佇列

btnqueue.empty()
佇列是否為空,能夠理解為空為1。非空為0

btnqueue.front()
佇列的頭

【參考文件】

從上往下列印二叉樹

從上往下列印二叉樹需要乙個雙端佇列,stl提供了deque容器符合我們的要求,和測試 如下 include include include using namespace std struct binarytreenode binarytreenode createbinarytreenode in...

從上往下列印二叉樹

題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 用佇列儲存將要列印的節點,出佇列時,將左節點和右節點分別加入佇列當中,直到隊列為空,列印完畢。public arraylist integer printfromtoptobottom treenode root queue qu...

從上往下列印二叉樹

題目 從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。程式 include include include struct binarytreenode 函式名稱 createbinarytree 函式功能 通過二叉樹的先序序列建立二叉樹 輸入引數 proot 二叉樹的根節點 st...