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

2022-03-10 08:37:57 字數 703 閱讀 7895

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

這道題還是需要畫圖分析,不然不好找規律。

正常的廣度遍歷的話,都是同樣的順序,從左到右,而我們要在廣度遍歷的基礎上改造為之字形遍歷。

也就是我們需要在奇數行從左至右,在偶數行從右至左,因為是先進後出,分析可得我們需要的資料結構是棧。

為了避免順序錯誤,我們需要的不只是乙個棧,而是兩個棧,這個大家畫圖研究下就能想到。

兩個棧是這麼用的,這個棧儲存這一行的資料,另乙個棧儲存下一行的資料,然後一行列印完後交替。

當然也有人是在廣度遍歷的基礎上加個臨時陣列,然後對偶數行的資料reverse也可以做,但是我覺得reverse效率太低,所以就不打算寫這種方法了。

function

print(proot)

const stack1 =;

const stack2 =;

stack2.push(proot);

let i = 1;

while (stack1.length !== 0 || stack2.length !== 0)

}//為偶數層

else

}++i;

lists.push(list);

} return

lists;

}

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

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。層序遍歷 coding utf 8 class treenode def init self,x self.val x self.left none sel...

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

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

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

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