從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
相比較層次遍歷二叉樹,這個地方要求每輸出一行都需要換行。
重點思考的地方也就是,如何判斷一行列印完了,進行下一行的列印。
先從層次遍歷開始,借用佇列結構,會依次把下一層的結點加入佇列中。
那麼如何判斷一行列印完了?
那麼我們可以維護兩個整型變數,來記錄一層結點的數目情況。一次迴圈中,當前層結點減一,下一層結點(左或右結點入隊)數目加一。當我們當前層的結點數為0,也就是這一層遍歷完了,我們可以進行換行,同時進入遍歷下一層。此時:當前層 = 下一層結點數,下一層結點數目 =0。
牛客網提交寫法:
arraylist> print(treenode proot)
if (p.right != null)
if (numofcurrent == 0)
}return result;
}
實際面試過程中,如果要求直接輸出的話。**可以更改為如下:
public void print(treenode root)
if (p.right!=null)
// 更新當前層和下一層的結點數目
if (current == 0)
}}
劍指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...