剑指 Offer 07. 重建二叉树
程序员文章站
2022-06-17 16:54:57
...
剑指 Offer 07. 重建二叉树
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/
前序和中序重建二叉树,先在前序中找到根节点,然后在中序列表中找到根节点的位置,然后递归分别建立左右子树。这里可以用哈希表存储中序各个节点的位置,避免递归的时候在中序中找到根节点需要每次遍历中序列表。时间复杂度O(N), 空间复杂度O(N)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
self.root_loc, self.preorder = {}, preorder
for i, node in enumerate(inorder): #记录中序列表中每个节点的位置
self.root_loc[node] = i
return self.dfs(0, 0, len(inorder)-1)
def dfs(self, pre_root, in_left, in_right):
if in_left > in_right:
return None
root = TreeNode(self.preorder[pre_root])
i = self.root_loc[self.preorder[pre_root]]
root.left = self.dfs(pre_root+1, in_left, i-1)
root.right = self.dfs(pre_root+i-in_left+1, i+1, in_right)
return root
推荐阅读
-
《剑指offer》面试题6 重建二叉树
-
剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
-
剑指offer31:整数中1出现的次数(从1到n整数中1出现的次数)
-
剑指offer28:找出数组中超过一半的数字。
-
剑指offer27:按字典序打印出该字符串中字符的所有排列
-
C#版剑指Offer-001二维数组中的查找
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
剑指offer13:数组[奇数,偶数],奇数偶数相对位置不变。
-
剑指offer第二天
-
剑指offer JZ31 整数中1出现的次数 Python 解