当前位置: 首页 > news >正文

NC重建二叉树

系列文章目录


文章目录

  • 系列文章目录
  • 前言


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
给定节点数为 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.只需要返回根结点,系统会自动输出整颗树做答案对比
思路:
前序遍历:根→左→右
中序遍历:左→根→右

由前序遍历序列pre={1,2,4,7,3,5,6,8}可知根结点是1;
则在中序遍历序列in={4,7,2,1,5,3,8,6}中找到1,便可知1所在位置的左侧是左子树,1所在位置的右侧是右子树;
递归调用:将左子树和右子树分别看成一颗树,将其前序遍历序列、中序遍历序列分别传入到该方法中,便可得到左子树的根结点、右子树的根结点。此时需要用第一步得到的根结点连接它们;
递归调用的终止条件:直到传入数组为空,说明已经没有节点,直接返回null。
答案:

import java.util.Arrays;
public class Solution {public TreeNode reConstructBinaryTree(int [] pre,int [] in) {//递归调用的终止条件if(pre.length == 0 || in.length == 0){return null;}//由前序遍历得到该二叉树的根结点TreeNode root = new TreeNode(pre[0]);//在中序遍历中找根结点位置,进行左右子树的划分for(int i = 0; i < in.length; i++){if(root.val == in[i]) {//将左子树看成一棵二叉树调用该方法,可以得到左子树根结点,即上面根结点的左子结点root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i));//将右子树看成一棵二叉树调用该方法,可以得到右子树根结点,即上面根结点的右子结点root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length));//找到根结点位置便跳出循环break;}}//返回根结点return root;}
}
http://www.lryc.cn/news/407051.html

相关文章:

  • 2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展
  • 电子邮件协议详解
  • C++客户端Qt开发——Qt窗口(工具栏)
  • Python酷库之旅-第三方库Pandas(046)
  • element表单disabled功能失效问题
  • react防抖和节流hooks封装
  • DLMS/COSEM中公开密钥算法的使用_椭圆曲线加密法
  • argon主题调整日记
  • Godot入门 05收集物品
  • 353_C++_Boost.Asio库来处理异步操作
  • 【Django】django模板与前端技术(html模板)
  • Java连接Redis和SpringBoot整合Redis
  • 快速入门Jupyter notebook
  • Java反射详细学习笔记
  • 区块链在艺术市场中的创新:数字艺术品的溯源与版权保护
  • 智能编程,一触即发:使用AIGC优化CSS——提升前端开发效率与质量
  • 鸿蒙界面开发
  • 【JavaScript】use strict
  • Linux云计算 |【第一阶段】SERVICES-DAY3
  • Java面试八股之Spring-boot-starter-parent的作用是什么
  • Python 和 Boto3 生成 Amazon S3 对象的 HTTPS URL
  • V-bind动态绑定style的案例集合
  • 深度学习守护夜行安全:夜视行人检测系统详解
  • 亚信安慧AntDB亮相PostgreSQL中国技术大会,获“数据库最佳应用奖”并分享数据库应用实践
  • 如何减少白屏的时间
  • 科研成果 | 高精尖中心取得高性能区块链交易调度技术突破
  • go语言学习文档精简版
  • 立元科技-Java面经
  • OpenGL入门第六步:材质
  • 新版SpringSecurity5.x使用与配置