(劍指offer)34 二叉樹中和為某一值的路徑

2021-09-27 03:22:18 字數 1527 閱讀 1519

輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

# 返回二維列表,內部每個列表表示找到的路

def findpath(self, root, expectnumber):

# write code here

if not root:

return

if root.left == none and root.right == none:

if expectnumber == root.val:

return [[root.val]]

else:

return

stack =

leftstack = self.pathsum(root.left, expectnumber - root.val)

for i in leftstack:

i.insert(0, root.val)

rightstack = self.pathsum(root.right, expectnumber - root.val)

for i in rightstack:

i.insert(0, root.val)

return stack

def pathsum(self, root, sum):

if not root: return

if root.left == none and root.right == none:

if sum == root.val:

return [[root.val]]

else:

return

a = self.pathsum(root.left, sum - root.val) + self.pathsum(root.right, sum - root.val)

return [[root.val] + i for i in a]

if __name__ == '__main__':

pnode1 = treenode(10)

pnode2 = treenode(5)

pnode3 = treenode(12)

pnode4 = treenode(4)

pnode5 = treenode(7)

pnode1.left = pnode2

pnode1.right = pnode3

pnode2.left = pnode4

pnode2.right = pnode5

s = solution()

print(s.findpath(pnode1, 22))

劍指Offer 34 二叉樹中和為某一值的路徑

題目描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。struct treenode class solution void dfs treenode root,int s,vector ret,vect...

劍指Offer 34 二叉樹中和為某一值的路徑

輸入一棵二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 5 1返回 5,4,11,2 5,8,4,5 思路很明確,深度優先搜尋sum node ...

劍指Offer 34 二叉樹中和為某一值的路徑

20.5.3 最佳寫法 注意不要在新增了一條路徑後直接返回,任何乙個節點返回時都要從路徑中pop出去 class solution void dfs treenode root,int sum if root left dfs root left,sum if root right dfs root...