輸入一棵二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
示例:給定如下二叉樹,以及目標和 sum = 22,
5
/ \4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[[5,4,11,2],
[5,8,4,5]
]python
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
# 思路:
# 這是二次樹的搜尋問題,採用回溯法:bfs+路徑記錄
# 複雜度:
# o(n)
class
solution
:def
pathsum
(self, root: treenode,
sum:
int)
-> list[list[
int]]:
res, path =
,[]# 結果列表,路徑列表
defrecur
(root,
sum):if
not root:
return
# 路徑更新
sum-= root.val # 目標值更新
ifsum==0
andnot root.left and
not root.right:
# 注意上述三條件缺一不可
list
(path)
)# 正確路徑記錄,注意深拷貝
recur(root.left,
sum)
# 左子樹
recur(root.right,
sum)
# 右子樹
path.pop(
)# 路徑恢復,這是回溯法的精髓
recur(root,
sum)
# 根節點
return res
c++/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
void
recur
(treenode* root, vectorint>>
&res, vector<
int> path,
int sum)
recur
(root-
>left, res, path, sum)
;recur
(root-
>right, res, path, sum);}
};
劍指offer系列 二叉樹的深度
題目描述 輸入一棵二叉樹,求其深度 樹的深度定義為 從根節點到葉子節點的路徑長度的最大值 示例 分析 對每個節點而言,以該節點為根節點的樹的深度為左子樹和右子樹深度的較大值加1.因此用遞迴可以很容易的實現 int depth treenode root 分析 同樣可以用遞迴來實現。為了使每個節點只遍...
劍指offer 二叉樹 二叉樹搜尋樹
package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...
劍指offer 平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...