二叉樹系列之 按之字型順序列印二叉樹

2021-10-24 09:01:30 字數 1603 閱讀 2204

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

在「把二叉樹列印成多行」的基礎上再新增乙個判斷條件:偶數行從右到左(當然,還有設定乙個變數來記錄當前所處的是第幾行)

/*

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 完整 如下...