二叉樹中和為某一值的路徑 python

2022-08-05 18:33:09 字數 1353 閱讀 1415

輸入一顆二叉樹的根節點和一個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

分析:我們可以先從最簡單的情況開始考慮,最簡單的情況就是二叉樹只有一個根節點,判斷根節點的值與期望值是否相同就ok了。二叉樹稍微複雜一點就是根節點還有左右子節點,這時候的過程就要多一步,仍舊是先判斷根節點的值與期望值,如果相等或者期望值更小,則不必繼續向下判斷,如果期望值更大,那麼可以向下繼續判斷,此時的期望值變成了“期望值-根節點的值”,用新的期望值分別與左右子節點的值進行比較,因為左右子節點已經是葉節點,符合路徑的定義,因此如果節點的值與新的期望值相等,就得到了答案,如果不相等,問題無解。現在推廣到普通的二叉樹,與上面的分析相同,就是一個不斷更新期望值並與節點值比較的過程,這個過程是重複的,可以利用遞迴完成,下面來看一下具體**。

首先定義二叉樹

class

treenode:

def__init__

(self, x):

self.val =x

self.left =none

self.right = none

尋找路徑的**

class

solution:

#列印出二叉樹中結點值的和為輸入整數的所有路徑。

deffindpath(self, root, expectnumber):

ans=#

所有路徑的集合

if root==none:

return

ans

def iterpath(root,expectnumber,dir=):

if expectnumber>root.val:

#dir儲存當前路徑(不一定是符合要求的路徑)

#分別在左右子樹中尋找並更新期望值

if root.left!=none:

iterpath(root.left,expectnumber-root.val,dir)

if root.right!=none:

iterpath(root.right,expectnumber-root.val,dir)

elif expectnumber==root.val:

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

如果節點的值與期望值相同,則判斷節點是否為葉子結點,如果是葉子結點則是符合條件的路徑

tmp=dir[:]

else

: dir.pop()

#!!!!!!!!!!!!!

iterpath(root,expectnumber)

return ans

二叉樹中和為某一值的路徑

題目 輸入一顆二叉樹和一個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路 典型的回溯。。。。 public arraylist listall new arraylist public arraylistlist new...

二叉樹中和為某一值的路徑

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

二叉樹中和為某一值的路徑

1 coding utf 8 2class treenode 3def init self x 4 self val x 5 self left none 6 self right none78 deffunction root target number 9 result 10if notroot...