劍指offer:[程式設計題]二叉樹中和為某一值的路徑(Python)
題目描述:
輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
第一次做的解題思路:
二叉樹的深度優先搜尋~搜尋到葉子節點後,將該葉子節點pop出來,同時記得num要加回去,開始另一條支路的搜尋~ 幾點注意: 1.深拷貝和淺拷貝的區別,深拷貝要用copy.deepcopy() 2.為了防止路徑只到中間節點,注意拷貝需要的條件~第一次做的程式碼(2018.4.26):
import copy
class Solution:# 返回二維列表,內部每個列表表示找到的路徑
def __init__(self):
self.path_out = []
self.path = []
def DeepSearch(self, root, num):
if root:
if root.left:
self.path.append(root.left.val)
num = self.DeepSearch(root.left, num-root.left.val)
if root.right:
self.path.append(root.right.val)
num = self.DeepSearch(root.right, num- root.right.val)
if num == 0 and (not root.right) and (not root.left):
path = copy.deepcopy(self.path)
self.path_out.append(path)
num += self.path.pop()
return num
def FindPath(self, root, expectNumber):
# write code here
if root:
self.path.append(root.val)
expectNumber -= root.val
num = self.DeepSearch(root, expectNumber)
return self.path_out