首页 > 编程语言 >剑指Offer-Java-重建二叉树

剑指Offer-Java-重建二叉树

时间:2022-12-14 15:01:57浏览次数:55  
标签:pre index 遍历 Java Offer int ps 二叉树 TreeNode


题目

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

代码

/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
return constructTree(pre,0,pre.length-1,in,0,in.length-1);
}
//参数为 前序遍历结果数组 重建开始下标 结束下标
// 中序遍历结果数组 重建开始下标 结束下标
private TreeNode constructTree(int[] pre, int ps, int pe, int[] in, int is, int ie) {
if(ps > pe) return null;
int value = pre[ps];
int index =is;
while(index <= ie && value != in[index]) {
index ++;
}
if(index > ie)
throw new RuntimeException("Invalid Iuput!");
TreeNode root = new TreeNode(value);
//重建左子树
root.left = constructTree(pre, ps+1, ps+index-is, in, is, index-1);
//重建右子树
root.right = constructTree(pre, ps+index-is+1, pe, in, index+1, ie);
return root;
}
}

难点

在重建左右子树的时候其参数不容易理解

剑指Offer-Java-重建二叉树_前序遍历


这样就容易理解了 pre 为前序遍历结果

in为中序遍历结果


标签:pre,index,遍历,Java,Offer,int,ps,二叉树,TreeNode
From: https://blog.51cto.com/u_12938555/5936997

相关文章

  • 剑指Offer-Java-序列化二叉树
    题目请实现两个函数,分别用来序列化和反序列化二叉树代码此题的核心点是如何表示二叉树,并且解释。/*publicclassTreeNode{intval=0;TreeNodeleft=null;......
  • Java做UI自动化和app自动化中动态代理@FindBy的工作原理【杭州多测师_王sir】【杭州多
    Java做UI自动化和app自动化中动态代理@FindBy的工作原理一、背景简介由于Selenium框架采用PageObject设计模式让测试代码与被测页面对象代码分离,因而提供了不少很方便的注......
  • 【都 Java19 了,还不了解 Java 8 ? 】一文带你深入了解 Java 8 新特性
    Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的Stream......
  • JAVA-枚举使用
    枚举在本教程中,我们将了解什么是Java枚举、它们解决的问题以及它们的一些设计模式如何在实践中使用。1.概述Java5首先引入了enum关键字。它表示一种特殊类型的类,它总......
  • 巨蟒python全栈开发数据库前端5:JavaScript1
     1.js介绍&变量&基础数据类型2.类型查询&运算符&if判断&for循环3.while循环&三元运算符4.函数5.今日总结 1.js介绍&变量&基础数据类型js介绍(1)什么是JavaScript&一些历史......
  • 94. 二叉树的中序遍历
    给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]点击查看代码definorderTraversal(self,root):res......
  • Java8新特性
    一、Java8新特性1.Lambda表达式Lambda是匿名函数,使用它可以写出简洁,灵活的代码。  a.表达式无参数,无返回值,只有一个Lambda体Runnable r1=()->log.info......
  • Java面向对象2
    封装性    封装就是保护内容,保证某些属性或方法可以不被外部看见,而在内部自己去处理。 classPerson{Stringname;intage;publicvoidtell(){System.out......
  • Java面向对象1
     程序的发展阶段程序的发展经历了两个主要阶段:面向过程、面向对象。对于面向对象与面向过程可以用一个例子解释,如一个木匠要做一个盒子,那么做这个盒子的出发点会有两种......
  • 50个Java面试必问的面试题,我都给你整好了
    ​我们整理了一份主要的Angular面试问题清单,分为三部分:角度面试问题–初学者水平角度面试问题–中级角度面试问题–高级初学者水平–面试问题1.区分Angular和Angula......