面试题7:重建二叉树
2021/11/24 6:11:55
本文主要是介绍面试题7:重建二叉树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
限制:
0 <= 节点个数 <= 5000
先说下吧,这道题,,背过吧,实际开发没什么意义。工作就慢慢就理解了。
首先说下原理,先序遍历的第一个节点是根节点,这道题说不存在重复的元素,从而中序遍历的这个节点就可以将中序遍历结果分成两个子树,先序遍历的结果中去掉子节点,然后可以根据中序遍历拆成的两个子树的节点,分别再次确定下两个子树的根节点,像这种一步一步递归下去就可以确定每个节点的位置。从这种递归和区间分治的思想就可以看出,这道题的解法就这样,但是节点数量是大于1000的,所以递归最好不要用。改成迭代就好。
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution(object): def buildTree(self, preorder, inorder): """ :type preorder: List[int] :type inorder: List[int] :rtype: TreeNode """ def buildTree_recur(preorder_left,preorder_right,inorder_left,inorder_right): if preorder_left>preorder_right: return None preorder_root_index = preorder_left inorder_root_index = index[preorder[preorder_root_index]] root = TreeNode(preorder[preorder_root_index]) size_left = inorder_root_index - inorder_left root.left = buildTree_recur(preorder_left+1,preorder_left+size_left,inorder_left,inorder_root_index-1) root.right = buildTree_recur(preorder_left+1+size_left,preorder_right,inorder_root_index+1,inorder_right) return root n = len(preorder) index = {element:i for i,element in enumerate(inorder)} return buildTree_recur(0,n-1,0,n-1)
这里刚好可以复习下简单哈希表的创建
有空补下迭代的解法:
这篇关于面试题7:重建二叉树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南