目录
1. 前序+ 中序 重建二叉树
2. 二叉树中和为某一值的路径
1. 前序+ 中序 重建二叉树

前序 : 根左右
中序: 左根右
从前序知道根节点,在中序中找到那个点(dic)
递归左右
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
self.dic = {}
self.preorder = preorder
for i, value in enumerate(inorder):
self.dic[value] = i
return self.dfs(0, 0, len(inorder) - 1)
def dfs(self, pre_left, in_left, in_right):
if in_left > in_right:
return
root_value = self.preorder[pre_left]
root = TreeNode(root_value)
k = self.dic[root_value]
left_length = k - in_left
root.left = self.dfs(pre_left + 1, in_left, k - 1)
root.right = self.dfs(pre_left + 1 + left_length, k + 1, in_right)
return root
2. 二叉树中和为某一值的路径
树的DFS

从上往下遍历一遍
当到叶子节点的时候就判断一下是否满足,如果满足就记录下来
判断叶节点: 左右儿子都是空的
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def findPath(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
self.res = []
self.path = []
self.dfs(root, sum)
return self.res
def dfs(self, root, sum):
if not root:
return
self.path.append(root.val)
sum -= root.val
if not root.left and not root.right and not sum:
self.res.append(list(self.path))
self.dfs(root.left, sum)
self.dfs(root.right, sum)
self.path.pop()
322

被折叠的 条评论
为什么被折叠?



