博客
关于我
剑指offer笔记 07.给出二叉树的前序遍历和中序遍历,重建该二叉树
阅读量:585 次
发布时间:2019-03-11

本文共 1864 字,大约阅读时间需要 6 分钟。

剑指offer笔记 06.从尾到头打印链表 C++实现

剑指offer笔记 07.给出二叉树的前序遍历和中序遍历,重建该二叉树

1.题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:   3   / \  9  20    /  \   15   7

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.解答思路

1.前序遍历 [root | left | right],递归中用 i 表示索引

中序遍历 [left | root | right],递归中用 j 表示索引
2.
递归的参数有三个:

  • i 表示根节点在preorder中的索引
  • left 表示以索引为 i 的节点为根节点的子树在inorder中的左边界索引
  • right 表示以索引为 i 的节点为根节点的子树在inorder中的右边界索引
  • 需要根据preorder中的根节点值定位其在inorder中的位置 j,以此确定左右子树的索引范围,因此需要用哈希表hashmap记录一下每个节点值对应的在inorder中的索引
  • 进入递归后,先创建根节点,读取根节点在inorder中的索引 j ,再创建左右子节点,进入递归:
    i. 左子树中的根节点索引为 i + 1,左边界索引为 left,右边界索引为 j - 1
    ii. 右子树中的根节点索引为 根节点索引 + 左子树长度 + 1 = i + (j - left) + 1,左边界索引为 j + 1,右边界索引为 right
  • 返回根节点root

作者:edelweisskoko

链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/solution/jian-zhi-offer-07-zhong-jian-er-cha-shu-2j9vf/
来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3.知识要点

  • 建立哈希索引
private Map
hashmap = new HashMap<>();
  • 把中序遍历放入哈希索引中:
for(int i =0;i
  • 构建一颗以preorder[i]为根节点的树:
TreeNode root=new TreeNode(preorder[i]);

4.java代码

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {      private Map
hashmap = new HashMap<>(); private int[] preorder; public TreeNode buildTree(int[] preorder, int[] inorder) { this.preorder=preorder; for(int i=0;i
right){ return null; } TreeNode root=new TreeNode(preorder[i]);//定义一颗以preorder[0]树根的树 int j=hashmap.get(preorder[i]);//找到树根root在中序遍历中的位置 root.left=recur(i+1,left,j-1); root.right=recur(i-left+j+1,j+1,right); return root; } }
你可能感兴趣的文章
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>