汇芳书院

专注计算机视觉、机器学习、分布式计算等领域, 兼聊投资、写作、生活

0%

从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。


递归的思路

但是这里面的细节需要一些优化才能通过OJ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if not preorder or not inorder:
return None
if len(preorder) <=1 or len(inorder) <= 1:
return TreeNode(preorder[0])

root_val = preorder[0]
root = TreeNode(root_val)

inorder_dict = {v:k for k, v in enumerate(inorder)}

i = 0
inorder_index = inorder_dict[root_val]
left_tree_num = inorder_index
right_tree_num = len(inorder) - inorder_index - 1

root.left = self.buildTree(list(preorder[1:left_tree_num+1]), list(inorder[:inorder_index]))
root.right = self.buildTree(list(preorder[1+left_tree_num:]), list(inorder[inorder_index+1:]))
return root


迭代法

TODO

坚持原创分享,您的支持将鼓励我继续创作

欢迎关注我的其它发布渠道

------------- 本文结束,感谢阅读 如有问题可留言交流 -------------