103 二叉樹的鋸齒形層序遍歷

2021-10-19 10:00:22 字數 1855 閱讀 2831

題目描述

給定乙個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

例如:給定二叉樹[3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回鋸齒形層序遍歷如下:

[

[3],

[20,9],

[15,7]

]

題解:

兩種思路:

參考 二叉樹的層序遍歷 ,將偶數行的元素逆序即可

使用類似於雙端佇列結構,奇數行插入首部,偶數行插入尾部

法一:遞迴 + 逆序。

時間複雜度:o(n

)o(n)

o(n)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution);

ret[dep -1]

.emplace_back

( root-

>val )

;dfs

( root-

>left, dep +1)

;dfs

( root-

>right, dep +1)

;}vectorint>>

zigzaglevelorder

(treenode* root)};

/*記憶體:11.6mb,擊敗:21.90%

*/

法二:

迭代(廣搜) + 逆序。

時間複雜度:o(n

)o(n)

o(n)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution);

for( i =

0; i < size;

++i )

}for

(int i =

0; i < ret.

size()

;++i )

if( i &1)

reverse

( ret[i]

.begin()

, ret[i]

.end()

);return ret;}}

;/*記憶體:10.9mb,擊敗:97.07%

*/

法三:

雙端佇列。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution);

for( i =

0; i < size;

++i )

else

ret.

back()

.emplace_back

( root-

>val );}

order =

!order;

}return ret;}}

;/*記憶體:11.1mb,擊敗:89.89%

*/

103 二叉樹的鋸齒形層序遍歷

給定乙個二叉樹,返回其節點值的鋸齒形層序遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回鋸齒形層序遍歷如下 3 20,9 15,7 1.普通bfs 2.dfs是乙個有意思的思路 1....

103 二叉樹的鋸齒形層序遍歷

題目 給定乙個二叉樹,返回其節點值的鋸齒形層序遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回鋸齒形層序遍歷如下 3 20,9 15,7 思路 同層序遍歷,採用bfs,不過要在每層加...

103 二叉樹的鋸齒形層序遍歷

給定乙個二叉樹,返回其節點值的鋸齒形層序遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回鋸齒形層序遍歷如下 3 20,9 15,7 解題思路 1.基本思路模仿二叉樹的層序遍歷 2.定...