請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
在「把二叉樹列印成多行」的基礎上再新增乙個判斷條件:偶數行從右到左(當然,還有設定乙個變數來記錄當前所處的是第幾行)
/*
public class treenode }*/
public
class
solution
level++;if
(level %2==
0) collections.
reverse
(list)
;//層數為偶數,就從右往左
result.
add(list);}
return result;
}}
上面的是利用collections.reverse(list)
實現對不同的層正反儲存。
下面使用arraylist<>()
的add(index,element)
方法實現,每次執行add(0,node.val)
會將新元素新增到0的位置,後面的元素會依次往後順延。
public
class
solution
else
if(node.left != null) queue.
offer
(node.left);if
(node.right != null) queue.
offer
(node.right);}
if(list.
size()
>0)
reverse =
!reverse;
// 每迴圈一層,逆序
}return result;
}}
陣列的順延的方式效率仍然是比較低,現在用兩個棧來實現,我們在列印某一行結點時,把下一層的子結點儲存到相應的棧裡。如果當前列印的是奇數層,則先儲存右子結點再儲存左子結點到乙個棧裡;如果當前列印的是偶數層,則先儲存左子結點再儲存右子結點到第二個棧裡。
時間複雜度:具體說:o(n)
空間複雜度:
o(n)
設兩個棧,s1
存放奇數層,s2
存放偶數層
public
class
solution
level++;if
(list2.
size()
>
0)result.
add(list2);}
if(level%2==
1)level++;if
(list1.
size()
>
0) result.
add(list1);}
}return result;
}}
按之字形順序列印二叉樹
題目描述 按之字形順序列印二叉樹 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。解析 要分層列印,不能用常規方法,訪問乙個節點後,將該節點的左右子節點壓入佇列。奇數層從左到右列印,偶數層從右向左列印。使...
按之字形順序列印二叉樹
請實現乙個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。include iostream include stack using namespace std struct treenode void pri...
按之字形順序列印二叉樹
其實我們可以借鑑層次遍歷時候的思路,參見劍指offer 060 把二叉樹列印成多行,我們把層次遍歷的結果儲存在vector vector 中每一層儲存在乙個vector中,那麼我們輸出的時候就可以進行調整,按照之字形輸出即可 for int i 0 i if i 1 return ans 完整 如下...