1. 程式人生 > >劍指Offer-- 二叉搜索樹中和為某一值的路徑

劍指Offer-- 二叉搜索樹中和為某一值的路徑

div find 對象 return ref span tree com --

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

本身題目不是很難,但是因為剛接觸pyhon,對一些對象的傳遞不太了解,所以跳了很久也沒有通過,後來看到 這篇文章 後才明白,犯了一樣的錯誤

# -*- coding:utf-8 -*-
# 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 res = [] # 存放結果 註意若寫成res[[]],那麽結果會多出一個[], paths = [] # 存放路徑 這裏沒有使用stack,因為python中列表是可變的,具有stack的功能 self.helper(root, res, paths, expectNumber)
return res def helper(self, root, res, paths, expectNumber): if root: paths.append(root.val) # 將訪問節點的值存入到 路徑 列表中 if (sum(paths) == expectNumber) and (not root.left) and (not root.right): # 若是 路徑 列表中的總和等於給定的數值,那麽就將此路徑添加到結果中 res.append(paths[:]) #
註意此處 !! 不是 res.append(paths) 因為python的可變對象都是引用傳遞 if root.left: # 訪問左子樹 self.helper(root.left, res, paths, expectNumber) if root.right: # 訪問右子樹 self.helper(root.right, res, paths, expectNumber) del paths[-1] # 每次從子節點返回到父節點時 要刪除掉子節點的值

思路就是 : 去考慮前序遍歷二叉樹,然後在遍歷的時候根據題目的要求去做一些判斷

在helper函數中,可以大致分為三塊,第一塊是對於訪問到的根節點進行一些操作處理,第二塊是訪問左子樹,第三塊是訪問右子樹,最後別忘了 每次從子節點返回到父節點時,要在路徑中刪除子節點的值

劍指Offer-- 二叉搜索樹中和為某一值的路徑