剑指offer面试题6 重建二叉树(java)

时间:2021-10-01 00:02:33

注:(1)java中树的构建

(2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的

 package com.xsf.SordForOffer;

 import java.util.Arrays;

 /*剑指offer第6个问题
  根据前序和中序遍历来重建二叉树
  */
 class BinaryTreeNode {
     public int value;
     public BinaryTreeNode leftNode;
     public BinaryTreeNode rightNode;
 }

 class ConstructCore {
     /*
      * 输入二叉树的前序遍历和中序遍历结果,重建二叉树并输出头节点 ex:12473568,47215386
      */
     public BinaryTreeNode constructCore(int[] preorder, int[] inorder)
             throws Exception {

         if (preorder == null || inorder == null) {
             return null;
         }
         if (preorder.length != inorder.length) {
             throw new Exception("长度不一样-非法输入");
         }
         BinaryTreeNode root = new BinaryTreeNode();
         for (int i = 0; i < inorder.length; i++) {
             if (inorder[i] == preorder[0]) {
                 // isHave = true;
                 root.value = inorder[i];
                 root.leftNode = constructCore(
                         Arrays.copyOfRange(preorder, 1, i + 1),
                         Arrays.copyOfRange(inorder, 0, i));
                 root.rightNode = constructCore(
                         Arrays.copyOfRange(preorder, i + 1, preorder.length),
                         Arrays.copyOfRange(inorder, i + 1, inorder.length));
             }
         }

         return root;
     }

     public void lastOrderTraverse(BinaryTreeNode T) {
         if (T != null) {
             lastOrderTraverse(T.leftNode);
             lastOrderTraverse(T.rightNode);
             System.out.print(T.value);
         }
     }
 }

 public class Pro6Biconstruct {
     public static void main(String[] args) throws Exception {
         ConstructCore test = new ConstructCore();
         int[] pre = { 1, 2, 4 };
         int[] in = { 2, 1, 4 };
         BinaryTreeNode root = test.constructCore(pre, in);
         test.lastOrderTraverse(root);
     }
 }

剑指offer面试题6 重建二叉树(java)的更多相关文章

  1. 剑指offer面试题6 重建二叉树&lpar;c&rpar;

  2. 剑指offer【04】- 重建二叉树&lpar;java&rpar;

    题目:重建二叉树 考点:树 题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6, ...

  3. 剑指Offer&colon;面试题6——重建二叉树(java实现)

    问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不包含重复的数字. 例如: 输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1 ...

  4. C&plus;&plus;版 - 剑指Offer 面试题39:二叉树的深度&lpar;高度&rpar;&lpar;二叉树深度优先遍历dfs的应用&rpar; 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  5. 剑指Offer - 九度1385 - 重建二叉树

    剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...

  6. 剑指offer&lowbar;面试题6&lowbar;重建二叉树(分解步骤,逐个击破)

    题目:输入某二叉树的前序遍历和中序遍历的结果.请重建出该二叉树.如果输入的前序遍历和中序遍历的结果中都不含反复的数字. 比如:输入前序遍历 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7 ...

  7. 剑指offer第二版-7&period;重建二叉树

    描述:输入某二叉树的前序遍历和中序遍历结果,重建该二叉树.假设前序遍历或中序遍历的结果中无重复的数字. 思路:前序遍历的第一个元素为根节点的值,据此将中序遍历数组拆分为左子树+root+右子树,前序遍 ...

  8. 剑指offer(4)重建二叉树

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

  9. 剑指offer——面试题8:二叉树的下一个节点

    // 面试题8:二叉树的下一个结点 // 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? // 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. ...

随机推荐

  1. 夺命雷公狗-----React&lowbar;native---2---sdk的安装

    首先回到刚才的那个android的目录下,创建一个sdk文件夹 解压完成后目录结构如下所示: 然后就来设置环境变量,我们需要添加一个"ANDROID_HOME" 然后将这3个文件夹 ...

  2. 谷歌身份验证器加强Linux帐户安全

    下载 Google的身份验证模块 # wget https://google-authenticator.googlecode.com/files/libpam-google-authenticato ...

  3. hiho &num;1050 &colon; 树中的最长路 树的直径

    #1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...

  4. opencv Installation in Linux and hello world

    http://opencv.org/quickstart.html Installation in Linux These steps have been tested for Ubuntu 10.0 ...

  5. 企业微信开发之发放企业红包(C&num;)

    一.企业微信API 地址:http://work.weixin.qq.com/api/doc#11543 二.参数说明 1.发送企业红包 请求方式:POST(HTTPS)请求地址:https://ap ...

  6. mongoDB 文档操作&lowbar;删

    mongoDB 文档删除 MySQL对比 mysql delete from table where ... mongo db.collection.deleteOne(query) 删除函数 del ...

  7. git pull更新错误解决办法

    Your local changes to the following files would be overwritten by mergeerror: Your local changes to ...

  8. ML&period;NET教程之出租车车费预测&lpar;回归问题&rpar;

    理解问题 出租车的车费不仅与距离有关,还涉及乘客数量,是否使用信用卡等因素(这是的出租车是指纽约市的).所以并不是一个简单的一元方程问题. 准备数据 建立一控制台应用程序工程,新建Data文件夹,在其 ...

  9. 2&period;sklearn库中的标准数据集与基本功能

    sklearn库中的标准数据集与基本功能 下面我们详细介绍几个有代表性的数据集: 当然同学们也可以用sklearn机器学习函数来挖掘这些数据,看看可不可以捕捉到一些有趣的想象或者是发现: 波士顿房价数 ...

  10. 安装phpredis

    1.下载安装包 https://github.com/nicolasff/phpredis/archive/2.2.5.tar.gz 2.解压到~目录 tar -xvf phpredis-2.2.5. ...