劍指offer 把二叉樹列印成多行

2021-10-02 15:25:45 字數 850 閱讀 5839

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。

這道題的題意很簡單,就是層次遍歷(bfs),輸出結果。

按照上圖的二叉樹,簡單分析一下層次遍歷的過程。

將結點 8 放入佇列中。

取出佇列頭結點 8,輸出。

判斷結點 8 是否存在左右結點,存在,將結點 3 和 10 放入佇列中。

取出佇列頭結點 3,輸出,再判斷是否存在左右結點,存在,將結點 1 和 6 放入佇列中。

再取出佇列頭結點 10,輸出,再判斷是否存在左右結點,存在,將結點 14 放入佇列中。

如此類推,直至隊列為空,則所有結點遍歷完成。

層次遍歷通常會使用佇列來儲存中間結點,其步驟如下:

儲存根結點

取出佇列的頭結點,遍歷。判斷佇列頭結點是否存在左右結點,若存在,分別將左右結點加入佇列中。

當佇列中所有結點都判斷完,隊列為空,遍歷結束。

在這裡,因為題目要求每一層輸出一行,所以在對佇列進行判斷操作前,要直到佇列長度,也就是這一層有多少個元素,這一層需要重複多少次「取出頭結點-判斷頭結點左右結點是否存在」的操作。

實現**:

/*

struct treenode

};*/

class

solution

arr.

push_back

(temp);}

return arr;}}

;

劍指Offer 把二叉樹列印成多行

題目描述 從上到下按層列印二叉樹,同層結點按從左向右的順序列印,每一層列印到一行。例如8 6 10 5 7 9 11 類似於按層遍歷二叉樹,利用廣度優先遍歷的思想,選擇stl的佇列。step1 把起始節點放到佇列當中。step2 每一次從佇列頭部取出乙個結點,遍歷過這個節點後,把它能到達的其他節點 ...

劍指offer 把二叉樹列印成多行

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路就是借助兩個輔助單向佇列queue來實現,暫且叫他們help1和help2。先把根節點壓入help1,然後依次取出help1裡面的元素,將其值放入儲存結果的vector中,並將其左右節點壓入help2,直至help1為空。此時hel...

劍指offer 把二叉樹列印成多行

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。用佇列來實現按行列印,但是由於要分層列印,需要區分每一行,所以要用乙個tmp來記錄每層列印出的結果 coding utf 8 class treenode def init self,x self.val x self.left non...