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

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

題目:

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

解答:

# -*- 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): self.rlist = [] self.stack = [] # write code here if root == None or expectNumber == 0: return self.rlist self.find(root, expectNumber) return self.rlist def find(self, root, expectNumber): self.
stack.append(root.val) if expectNumber == root.val and root.left == None and root.right == None: self.rlist.append(list(self.stack)) if root.left: self.find(root.left, expectNumber - root.val) if root.right: self.find(root.right, expectNumber -
root.val) if self.stack: self.stack.pop()
# -*- 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):
        if root == None or expectNumber == 0:
            return []
        self.rlist = []
        self.find([], root, expectNumber)
        return self.rlist
    def find(self, path, root, expectNumber):
        if sum(path) + root.val == expectNumber and root.left == None and root.right == None:
            path.append(root.val)
            self.rlist.append(path)
             
            return
        if sum(path) + root.val < expectNumber:
            path.append(root.val)
            if root.left:
                self.find(list(path), root.left, expectNumber)
            if root.right:
                self.find(list(path), root.right, expectNumber)
        return