請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
方法1:
正常層次遍歷,利用普通佇列。逢奇數行(從0算起)就把該層結果逆序。
1class
solution ;}
5 queuemy_queue;
6my_queue.push(proot);
7 vectorint>>res;
8 vectorvec;
9int cnt=0;10
while
(not my_queue.empty())
20if(cur->right)23}
24if(cnt&1)27
res.push_back(vec);
28 ++cnt;29}
30return
res;31}
32 };
方法2:
利用雙端佇列,佇列中順序始終是正常的,但奇數行從右向左遍歷,pop右邊的,孩子push進左邊。偶數行從左向右遍歷,pop左邊的,孩子push進右邊。
1class
solution ;}
5 dequemy_queue;
6my_queue.push_back(proot);
7 vectorint>>res;
8int cnt=0;9
while
(not my_queue.empty()));
11int cur_siz=my_queue.size();
12decltype(proot) cur;
13for(int i=0;ii)
20if(cur->left)23}
24else
30if(cur->right)33}
34 res.back().push_back(cur->val);35}
36 ++cnt;37}
38return
res;39}
40 };
3 15 劍指offer 按之字形順序列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。層序遍歷的高階 每行的節點的訪問順序是相反的,我們可以用兩個棧來隔行儲存,乙個棧中根據另乙個棧的棧頂元素的 左結點 右結點 的順序儲存節點,而另乙個棧根據另...
劍指offer 按之字形順序列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。我的解法是用兩個棧來列印,第乙個棧st1列印奇數層,第二個棧st2列印偶數層。先將根節點壓入st1,然後將st1中元素出棧並訪問元素,出棧的同時,將每個節點...
劍指offer 按之字形順序列印二叉樹
題目 劍指offer 按之字形順序列印二叉樹 這個題的本質是返回每一層的節點,關鍵是增加每一層的最右側節點作為標記。如果指標到達這個節點,那麼證明此時佇列裡面的都是下一層的節點。關鍵是為什麼不會有下下層的節點,因為現在訪問到last,最多生成下一層的節點,不會有下下層。所以,此時佇列中最後乙個節點就...