給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
5
/ \4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[[5,4,11,2],
[5,8,4,5]
]先把題貼上來。這裡無非就是遞迴回溯然後找到輸出條件即可
這裡先貼下二叉樹的前中後遍歷**
class
tree()
:def
__init__
(self)
:pass
deffront
(self,root)
: res =
defback
(root,res)
:if root is
none
:return
back(root.left,res)
back(root.right,res)
back(root,res)
return res
defmid(self,root)
: res =
defback
(root,res)
:if root is
none
:return
back(root.left,res)
back(root.right,res)
back(root,res)
return res
defbehind
(self,root)
: res =
defback
(root,res)
:if root is
none
:return
back(root.left,res)
back(root.right,res)
back(root,res)
return res
############呼叫
solu = tree(
)front = solu.front(root)
mid = solu.front(root)
behind = solu.behind(root)
輸出:[5,
4,11,
7,2,
8,13,
4,5,
1][7
,11,2
,4,5
,13,8
,5,4
,1][
7,2,
11,4,
13,5,
1,4,
8,5]
這裡我們再看下這個題,首先我們前序遍歷出所有的路徑
1.判斷是否為葉節點,如果是則判斷是否sum==target
2.利用回溯找到所有的路徑
class
solution()
:def
pathsum
(self,root,target)
: front =
res =
self.back(root,front,res)
return res
defback
(self,root,front,res)
:if root is
none
:return
self.back(root.left,front,res)
self.back(root.right,front,res)
if root.left is
none
and root.right is
none
: tt =
[i for i in fron]
ifsum
(tt)
== target:
return
front.pop(
)###########呼叫
solu = solution(
)target =
22res = soul.pathsum(root,target)
print
(res)..
....
..[[
5,4,
11,2]
,[5,
8,4,
5]]
LeetCode112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。遍...
LeetCode 112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 ...
Leetcode 112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721 返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。...