二叉树OJ题(用前序和中序遍历构建二叉树,用中序和后续遍历构建二叉树)

文章目录

  • 二叉树OJ题
    • 一、用前序和中序遍历构建二叉树
      • 1.思路
      • 2.代码
    • 二、用中序和后续遍历构建二叉树
      • 1.思路
      • 2.代码


二叉树OJ题


一、用前序和中序遍历构建二叉树

在这里插入图片描述

1.思路

1.根据前序遍历找到根结点root

2.在中序遍历中(inBegin=0和inEnd=elem.length-1范围之间)找到根的位置 rootIndex

3.左树就是旧的inBegin=0到新的inEnd=rootIndex-1

4.右树就是新的inBegin= rootIndex+1到旧的inEnd

5.先创建根节点 ,找到当前根结点在中序排列中的位置 ,i++

6.遍历左右子树,返回值由根的左右接收,中序遍历的范围在子树中改变

7.因为右树inBegin = rootindex+1,左树inEnd=rootIndex -1 ,造成inBegin>inEnd时,返回空,说明没有子树了

2.代码

class Solution {public int i = 0;public TreeNode buildTree(int[] preorder, int[] inorder) {return buildTreeChild(preorder,inorder,0,inorder.length-1);}public TreeNode buildTreeChild(int[] preorder, int[] inorder,int inBegin,int inEnd) { if(inBegin>inEnd){return null; //没有子树了}TreeNode root = new TreeNode(preorder[i]);//创建根节点//找到当前根结点在中序排列中的位置 int rootIndex = findIndex(inorder,inBegin,inEnd,preorder[i]);i++;root.left = buildTreeChild(preorder,inorder,inBegin,rootIndex-1);//遍历创建左右子树,中序遍历中,左右子树的范围改变root.right = buildTreeChild(preorder,inorder,rootIndex+1,inEnd);return root;}private int findIndex(int[] inorder,int inBegin,int inEnd,int key){for(int i = inBegin;i<=inEnd;i++){//根基范围找到下标if(key == inorder[i]){return i;}}return -1;}    
}

二、用中序和后续遍历构建二叉树

在这里插入图片描述

1.思路

1.从后续遍历的末尾找到根节点,i–;

2.在中序遍历中找到根节点的下标

3.后续遍历是 左 -> 右 -> 根,先创建右树,在创建左树

4.右树范围:inBegin = rootIndex+1,左树范围:inEnd = rootindex-1

5.其余原理同上;

2.代码

class Solution {public int i = 0;public TreeNode buildTree( int[] inorder,int[]postorder) {i = postorder.length-1;return buildTreeChild(postorder,inorder,0,inorder.length-1);}public TreeNode buildTreeChild(int[] postorder, int[] inorder,int inBegin,int inEnd) { if(inBegin>inEnd){return null; //没有子树了}TreeNode root = new TreeNode(postorder[i]);//创建根节点//找到当前根结点在中序排列中的位置 int rootIndex = findIndex(inorder,inBegin,inEnd,postorder[i]);i--;//遍历创建左右子树,中序遍历中,左右子树的范围改变root.right = buildTreeChild(postorder,inorder,rootIndex+1,inEnd);root.left = buildTreeChild(postorder,inorder,inBegin,rootIndex-1);       return root;}private int findIndex(int[] inorder,int inBegin,int inEnd,int key){for(int i = inBegin;i<=inEnd;i++){//根基范围找到下标if(key == inorder[i]){return i;}}return -1;}    
}

点击移步博客主页,欢迎光临~

偷cyk的图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/158240.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka、RabbitMQ、RocketMQ中间件的对比

消息中间件现在有不少&#xff0c;网上很多文章都对其做过对比&#xff0c;在这我对其做进一步总结与整理。 RocketMQ 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件&#xff0c;使用Mysql作为消息存储媒介&#xff0c;可完全水平扩容&#xff0c;为了进一步降低成…

三门问题 最通俗解释+拓展

三门问题是概率论比较经典的一个问题&#xff0c;答案有点反直觉&#xff0c;所以值得学习&#xff0c;理性第一&#xff01;但是&#xff0c;很多网上解释都让人云里雾里&#xff0c;或者干脆解释就是错了&#xff0c;或一上来就贝叶斯公式开始搞数学&#xff0c;其实很简单可…

Wonder3D安装完美教程

话不多说,先附上地址: https://github.com/xxlong0/Wonder3D#wonder3dhttps://github.com/xxlong0/Wonder3D#wonder3d 目录 一、预览 二、环境配置

2023年四川省网络与信息安全技能大赛 决赛个人赛Writeup

文章目录 Web前端验证PHP_Try MiscHelloWorld密码在这easy_log Cryptobaser 线下“断网”CTF个人赛&#xff0c;题都很简单(新手级难度)&#xff0c;总共10道题目&#xff0c;解了6题。 赛题附件请自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lgNEBO7a1L4KLE2t…

PerfectPixel 插件,前端页面显示优化工具

1.简介 PerfectPixel 插件是一款适用于 Chrome 浏览器的网页前端页面显示优化工具&#xff0c;该插件能够帮助开发人员和标记设计人员在开发时将设计图直接加载至网页中&#xff0c;与已成型的网页进行重叠对比&#xff0c;以规范网页像素精度 作为一款可以优化前端页面显示的…

AtCoder abc143

D - Triangles 排序后two pointer # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # author : yhdutongwoo.cn # desc : # file : atcoder.py # software : PyCharmimport bisect import copy import sys from sortedcontainers import SortedList from coll…

【沧元图】梅元知命运逆转,但遗憾下线,孟川新形态揭晓

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《沧元图》是近年来备受期待的动画作品之一&#xff0c;其独特的画风和精彩的剧情吸引了众多观众的关注。这部动画的播出计划备受瞩目&#xff0c;据主创团队透露&#xff0c;本季共有26…

华为RS设备状态及接口配置命令

1、查看硬件信息 ①查看序列号 查看整机序列号 display esn display sn ②、查看功率 电源功率 display power 查看光模块功率 display transceiver interface gigabitethernet 1/0/0 verbose ③、查看风扇 display fan ④、查看温度 display temperature all ⑤、查看硬…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

云原生环境下JAVA应用容器JVM内存如何配置?—— 筑梦之路

Docker环境下的JVM参数非定值配置 —— 筑梦之路_docker jvm设置-CSDN博客 之前简单地记录过一篇&#xff0c;这里在之前的基础上更加细化一下。 场景说明 使用Java开发且设置的JVM堆空间过小时&#xff0c;程序会出现系统内存不足OOM&#xff08;Out of Memory&#xff09;的…

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除

目录 一、添加数据 二、修改数据 三、删除数据 四、添加、修改和删除的源码 五、生成效果 1.VS和SSMS原始记录 2.删除ID2和5的记录 3.添加记录ID2、5和8 4.修改ID3和ID4的记录 用LINQtoSQL管理SQL Server数据库时&#xff0c;主要有添加、修改和删除3种操作。 项目中创…