輸入一棵二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
樣例
給出二叉樹如下所示,並給出num=22。
5/ \
4 6
/ / \
12 13 6
/ \ / \
9 1 5 1
輸出:[[5,4,12,1],[5,6,6,5]]
利用乙個path儲存中間的路徑的值,每次先把根加入,再把左子樹的根節點加入,直到葉子節點,如果這個葉子節點不滿足條件,則彈出這個節點,退到上一步的根節點,把根節點的右孩子節點加入
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
# 返回二維列表,內部每個列表表示找到的路徑
def dfs(self, root, expectnumber, res, path):
# write code here
if not root:
return
expectnumber = expectnumber - root.val
if not root.left and not root.right and expectnumber==0:
# 如果這裡加了return,在前面要多一次彈棧 path.pop(-1)
self.dfs(root.left, expectnumber, res, path)
self.dfs(root.right, expectnumber, res, path)
# 注意彈出這個節點
path.pop(-1)
def findpath(self, root, expectnumber):
res=
path=
self.dfs(root,expectnumber,res,path)
return res
劍指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...