請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
這道題還是需要畫圖分析,不然不好找規律。
正常的廣度遍歷的話,都是同樣的順序,從左到右,而我們要在廣度遍歷的基礎上改造為之字形遍歷。
也就是我們需要在奇數行從左至右,在偶數行從右至左,因為是先進後出,分析可得我們需要的資料結構是棧。
為了避免順序錯誤,我們需要的不只是乙個棧,而是兩個棧,這個大家畫圖研究下就能想到。
兩個棧是這麼用的,這個棧儲存這一行的資料,另乙個棧儲存下一行的資料,然後一行列印完後交替。
當然也有人是在廣度遍歷的基礎上加個臨時陣列,然後對偶數行的資料reverse也可以做,但是我覺得reverse效率太低,所以就不打算寫這種方法了。
functionprint(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中元素出棧並訪問元素,出棧的同時,將每個節點...