題目描述
給定乙個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:給定二叉樹[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.定...