劍指Offer 60 按之字形順序列印二叉樹

2021-10-04 00:19:48 字數 1671 閱讀 8762

題目描述

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

題解:bfs

主要的方法與bfs寫法沒什麼區別

bfs裡是每次只取乙個,而我們這裡先得到佇列長度size,這個size就是這一層的節點個數,然後通過for迴圈去poll出這size個節點,這裡和按行取值二叉樹返回arraylist>這種題型的解法一樣,之字形取值的核心思路就是通過兩個方法:

1

public

static arraylist>print(treenode proot) 7//

正序反序輸出控制

8boolean flag=true;9

queue.offer(proot);

10while (queue.size()!=0)

18if

(flag)else

23queue.offer(treenode.left);

24queue.offer(treenode.right);25}

26if(list.size()!=0)

29 flag=!flag;30}

31return

res;

32 }

初始化樹:

1

public

static

class

treenode 8}

9private

static listnodelist = null;10

public

static treenode createbintree(int

array)

16//

對前lastparentindex-1個父節點按照父節點與孩子節點的數字關係建立二叉樹

17for (int parentindex = 0; parentindex < array.length / 2 - 1; parentindex++)

25//

最後乙個父節點:因為最後乙個父節點可能沒有右孩子,所以單獨拿出來處理

26int lastparentindex = array.length / 2 - 1;

27//

左孩子28 nodelist.get(lastparentindex).left =nodelist

29 .get(lastparentindex * 2 + 1);

30//

右孩子,如果陣列的長度為奇數才建立右孩子

31if (array.length % 2 == 1)

35return nodelist.get(0);

36 }

測試:

1

public

static

void

main(string args) ;

3 treenode rootnode =createbintree(tree);

4 arraylist> lists =print(rootnode);

5system.out.println(lists);6}

7 輸出:[[8],[10,6],[5,7,9,11]]

3 15 劍指offer 按之字形順序列印二叉樹

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。層序遍歷的高階 每行的節點的訪問順序是相反的,我們可以用兩個棧來隔行儲存,乙個棧中根據另乙個棧的棧頂元素的 左結點 右結點 的順序儲存節點,而另乙個棧根據另...

劍指offer 按之字形順序列印二叉樹

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。我的解法是用兩個棧來列印,第乙個棧st1列印奇數層,第二個棧st2列印偶數層。先將根節點壓入st1,然後將st1中元素出棧並訪問元素,出棧的同時,將每個節點...

劍指offer 按之字形順序列印二叉樹

題目 劍指offer 按之字形順序列印二叉樹 這個題的本質是返回每一層的節點,關鍵是增加每一層的最右側節點作為標記。如果指標到達這個節點,那麼證明此時佇列裡面的都是下一層的節點。關鍵是為什麼不會有下下層的節點,因為現在訪問到last,最多生成下一層的節點,不會有下下層。所以,此時佇列中最後乙個節點就...