剑指offer 二叉树中和为某一个值的路径

剑指offer 牛客网 二叉树中和为某一个值的路径

# -*- coding: utf-8 -*-
"""
Created on Tue Apr  9 15:53:58 2019

@author: Administrator
题目:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
(注意: 在返回值的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):
        # 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
        
        
if __name__ == '__main__':
    solution = Solution()
    node_left = TreeNode(4)
    node_right = TreeNode(7)
    root_left = TreeNode(5)
    root_left.left = node_left
    root_left.right = node_right
    
    root_right = TreeNode(12)
    root = TreeNode(10)
    root.left = root_left
    root.right = root_right
    expectNumber = 22
    res = solution.FindPath(root,expectNumber)
    print(res)  #[[10, 5, 7], [10, 12]]

 

posted @ 2019-04-09 18:49  weilongyitian  阅读(151)  评论(0编辑  收藏  举报