問題**:二叉樹層次遍歷
問題描述:給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例子:
給定二叉樹: [3,9,20,null,null,15,7],
3
/ \
920/ \
157
返回其層次遍歷結果:
[[3
],[9
,20],
[15,7
]]
思路:廣度遍歷和深度遍歷。
與一般的廣度遍歷不同的是,每次遍歷都將queue彈空,這樣就能保證每次queue裡儲存的都是乙個層次的元素。
# 廣度遍歷
class
solution
:def
levelorder
(self, root: treenode)
-> list[list[
int]]:
# 如果樹為空
ifnot root:
return
# 如果樹非空
queue =
res =
while queue:
) cur_level =
len(queue)
for i in
range
(cur_level)
: temp = queue.pop(0)
res[-1
]if temp.left:
if temp.right:
return res
與一般深度遍歷不同的是,遞迴過程中我們僅需記住當前節點與層次即可。
# 深度遍歷
class
solution
:def
levelorder
(self, root: treenode)
-> list[list[
int]]:
# 樹為空
if root ==
:return
# 樹非空
res =
defhelper
(node, level):if
len(res)
== level:
) res[level]
if node.left:
helper(node.left, level+1)
if node.right:
helper(node.right, level+1)
return helper(root,
0)
廣度遍歷二叉樹和深度遍歷二叉樹演算法
二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...
Kotlin實現二叉樹的深度遍歷和廣度遍歷
今天,用kotlin打造乙個二叉樹,也是練手級別小製作,希望大家喜歡。資料結構知識 kotlin知識 data class treenode var value int,var leftchild treenode?null,var rightchild treenode?null 這裡只寫了新增和...
對稱二叉樹 深度遍歷與廣度遍歷
問題 對稱二叉樹 問題描述 給定乙個二叉樹,檢查它是否是映象對稱的。比如,下面這個二叉樹是映象對稱的 1 2 2 3 4 4 3 而這個二叉樹則不是映象對稱的。1 2 2 3 3例子 輸入 1,2,2,3,4,4,3 輸出 true 思路 映象對稱意味著左子樹與右子樹映象對稱,在遍歷左子樹或者右子樹...