剑指—JZ24二叉树中和为某一值的路径

题目描述

输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

解题思路

题目中已经明确说明了路径是从根节点到叶子节点的一条路径,这样子省去了很多步骤,判断是否是叶子结点就是node.left is None and node.right is None,那么这道题的思路就很明确了

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        res = []
        if not root:
            return []
        def dfs(tempNum, node, tempPath):
            if tempNum == node.val and node.left is None and node.right is None:
                tempPath.append(node.val)
                res.append(tempPath)
            if node.left:
                dfs(tempNum - node.val, node.left, tempPath + [node.val])
            if node.right:
                dfs(tempNum - node.val, node.right, tempPath + [node.val])
        dfs(expectNumber, root, [])
        return res

n8 = TreeNode(8)
n7 = TreeNode(7); n6 = TreeNode(6)
n4 = TreeNode(4); n5 = TreeNode(5); n3 = TreeNode(6)
n8.left = n7; n8.right = n6
n7.left = n4; n7.right = n5; n6.right = n3
S = Solution()
print(S.FindPath(n8, 20))

你可能感兴趣的:(剑指—JZ24二叉树中和为某一值的路径)