題目描述
輸入一顆二叉樹的根節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
解題思路
先訪問根節點,前序遍歷。
規律:用前序遍歷的方式訪問到某一結點,把該結點添加到路徑上,並累加該結點的值。如果該結點爲葉子結點並且路徑中結點值的和剛好等於輸入的整數,則當前的路徑符合要求,我們把它打印出來。如果當前結點不是葉子結點,則繼續訪問它的子節點。當前結點訪問結束後,遞歸函數將自動回到它的父結點。在函數退出之前要在路徑上刪除當前結點並減去當前結點的值,以確保返回父節點時路徑剛好是從根節點到父節點的路徑。
保存路徑的數據結構實際上是一個棧。
Python代碼
# -*- 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
if not root:
return []
if root and not root.left and not root.right and root.val == expectNumber:
return [[root.val]]
res = []
left = self.FindPath(root.left, expectNumber-root.val)
right = self.FindPath(root.right, expectNumber-root.val)
for i in left+right:
res.append([root.val]+i)
return res