#輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸出整數的所有路徑,從樹的根結點開始向下一直到葉結點所經過的結點形成一條路徑
deffindnumfromtree
(root,target_number)
: result =
ifnot root:
return result
#如果只有根節點或者找到葉子節點,我們就把其值返回
ifnot root.left and
not root.right and root.val == target_number:
return
[[root.val]
]else
:#如果不是葉子節點,我們分別對根節點的左子樹、右子樹進行遞迴,注意修改變數:
left = findnumfromtree(root.left,target_number - root.val)
right = findnumfromtree(root.right,target_number - root.val)
for item in left+right:
[root.val]
+item)
return result
class
treenode
:def
__init__
(self, x)
: self.val = x
self.left =
none
self.right =
none
root = treenode(8)
root.left = treenode(8)
root.right = treenode(7)
root.left.left = treenode(9)
root.left.right = treenode(2)
root.left.right.left = treenode(4)
root.left.right.right = treenode(7)
#遞迴呼叫的本質就是乙個壓棧和出棧的過程
print
(findnumfromtree(root1,25)
)
二叉樹中和為某一值的路徑
include include using namespace std struct node void find path node r,int exceptedsum,vector path,int cursum node buildbtree int a,int i void preorder...
二叉樹中和為某一值的路徑
要輸出所有的路徑,必須額外用乙個棧來儲存當前路徑資訊。當訪問到節點a時,節點a的資訊要在訪問a的左右子樹時用到,因而,該資訊必須在遍歷a的左右子樹前加入到棧中,而在遍歷完a的左右子樹後從棧中移除。每訪問乙個節點,就計算當前路徑值 可直接利用父節點的路徑值 當其等於給定值且當前節點是葉子節點時,就列印...
二叉樹中和為某一值的路徑
面試題25 二叉樹中和為某一值的路徑 struct binarytreenode int value binarytreenode pleft binarytreenode pright 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...