首页 > 编程语言 >每日算法之重建二叉树

每日算法之重建二叉树

时间:2022-11-26 10:36:22浏览次数:43  
标签:pre 遍历 TreeNode int vin length 算法 二叉树 重建

JZ7重建二叉树

描述

给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
提示:
1.vin.length == pre.length
2.pre 和 vin 均无重复元素
3.vin出现的元素均出现在 pre里
4.只需要返回根结点,系统会自动输出整颗树做答案对比

具体做法:

step 1:先根据前序遍历第一个点建立根节点。
step 2:然后遍历中序遍历找到根节点在数组中的位置。
step 3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。
step 4:直到子树的序列长度为0,结束递归。

代码

package mid.JZ7重建二叉树;

import java.util.*;


class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public class Solution {
    public TreeNode reConstructBinaryTree(int[] pre, int[] vin) {
        int n = pre.length;
        int m = vin.length;
        if (n == 0 || m == 0) return null;

        //前序遍历第一个为根节点
        TreeNode root = new TreeNode(pre[0]);
        for (int i = 0; i < vin.length; i++) {
            if (pre[0] == vin[i]) {
                //左子树
                root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i + 1), Arrays.copyOfRange(vin, 0, i));
                root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i + 1, pre.length), Arrays.copyOfRange(vin, i + 1, vin.length));
                break;
            }
        }
        return root;
    }
}

标签:pre,遍历,TreeNode,int,vin,length,算法,二叉树,重建
From: https://www.cnblogs.com/loongnuts/p/16927005.html

相关文章

  • 贪心算法篇——区间问题
    贪心算法篇——区间问题本次我们介绍贪心算法篇的区间问题,我们会从下面几个角度来介绍:区间选点区间分组区间覆盖区间选点我们首先来介绍第一道题目:/*题目名称*/......
  • 算法6:LeetCode_合并两个有序链表
    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1=[1,2,4],l2=[1,3,4]   输出:[1,1,2,3,4,4]......
  • 102. 二叉树的层序遍历
    102.二叉树的层序遍历给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],......
  • PSO 算法的变体python实现
    上演化计算课的时候老师让我们实现EOPSO算法(一种精英反向的粒子群优化算法),下面是他的算法步骤: 首先我们需要知道一些基础知识:(1)基础PSO算法 (2)精英反向解 impo......
  • 数据挖掘理论与算法,随笔1
    资源:b站本系列课程主要是启发为主,不会介绍很多很多的算法,适合初学者。一、学习资源书籍:国际会议:InternationalConferenceonDataMiningInternationalConference......
  • 2236. 伊基的故事 I - 道路重建
    题目链接2236.伊基的故事I-道路重建伊基是一个小国–凤凰国的国王。凤凰国是如此之小,以至于只有一个城市负责日常商品的生产,并使用公路网将商品运送到首都。伊基......
  • 快速取模算法(Barrett Reduction)
    原理:取模运算低效的原因本质是除法运算的低效。如果能将除法变成其它运算就可以加速。具体地,将除以任意数转化成“乘一个数、除以一个2k”(取262即可确保int范围内运算较为......
  • 第三周课程设计进展——基于java语言的国密算法库编译测试
    本周计划完成的任务本周实际完成情况(代码,文档,程序运行截图...),未完成计划的原因?如何改进?本周遇到的问题与解决过程(要详细)本周计划完成的任务给openeuler配置java......
  • 【SVM分类】基于鸽群算法优化支持向量机SVM实现分类附matlab的代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正|附代码数据
    全文下载链接:http://tecdat.cn/?p=13981 在本文中,随着多媒体技术的不断发展,数码相机,高清拍照手机等多媒体设备己经在人们的生活中占据了越来越重要的地位。最近我们被......