Java根据二叉树的先序和后序得到二叉树

一般情况下,我们会根据先序和后序写出二叉树,但是用代码怎末写呢?

例如:

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。



思路:我们先根据先序遍历找到根节点记录下来,在从中序数组中找到刚才记录下来根节点的下标,那么下标的左边就是根节点的左子树,后边就是根的右子树,依次递归求二叉树,递归截止条件在下图中说明:

开始状态

描述:

第一步,rootindex是根节点,begin和end是根节点的左右子树在中序数组的下标范围,下一步你们就明白了

第二步,我们找左子树,end=rootindex-1;begin不动

第三步,我们找右子树,end不动,begin=rootindex+1;

依次递归,每次都是先找根节点,再找左子树,后右子树,结束条件见就是begin>end的时候,解释:(相当于该节点是叶子节点)

代码展示:

  public  int preindex;//记录先序遍历的下标,如果放在递归的方法中递归后值发生改变public TreeNode buildTree(int[] preorder, int[] inorder) {return creatTree(0,inorder.length-1, preorder, inorder);}public TreeNode creatTree(int begin,int end,int [] preorder,int[] inorder){if (begin>end)return null;TreeNode root =new TreeNode(preorder[preindex]);int rootindex=find(begin, end, preorder[preindex], inorder);//获取根节点在中序数组中下标preindex++;root.left=creatTree( begin, rootindex-1, preorder, inorder);root.right=creatTree( rootindex+1, end, preorder, inorder);return root;}public int find(int begin,int end,int key,int[] inorder){for (int i = begin; i <=end ; i++) {if (inorder[i]==key)return i;}return -1;}

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

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

相关文章

pdf怎么查看?6个不能错过的软件!

PDF&#xff0c;作为一种常用的文件格式&#xff0c;已经成为了我们工作、学习中的必备工具。然而&#xff0c;对于许多新手来说&#xff0c;如何查看和编辑PDF文件却是一个不小的挑战。今天&#xff0c;我们就来为大家详细介绍一下如何查看和编辑PDF文件&#xff0c;以及一些必…

01_泛型

文章目录 泛型泛型类泛型接口泛型方法泛型的通配泛型的擦除 泛型 参数化类型。 泛型的好处&#xff1a; 省去了类型强转的麻烦&#xff08;比如&#xff1a;Object类、interface接口等都需要类型强转&#xff09;将运行期遇到的问题转移到了编译期 泛型类 所谓泛型类, 就是…

R语言【cli】——ansi_columns():把字符向量格式化为多个列

Package cli version 3.6.0 Description 这个函数有助于ANSI样式字符串的多列输出。它可以很好地与boxx()一起工作。 Usage ansi_columns(text,width console_width(),sep " ",fill c("rows", "cols"),max_cols 4,align c("left&quo…

Android Dialog setCanceledOnTouchOutside失效,点击dialog外面不消失

前言&#xff1a;有一个需求需要点击dialog外面要消失&#xff0c;本来以为很简单结果设置了一直未生效 setCanceledOnTouchOutside(true); 问了半天chat-gpt4结果给的答案都不明显 查看代码发现设置了style&#xff0c;于是尝试去除这个style&#xff0c;结果点击setCancele…

Access2007数据库有没有版权问题?

正常部署&#xff0c;本地读写&#xff0c;涉不涉及版权问题&#xff1f;

【c++】——栈or队列or优先级队列

目录 &#x1f393;容器适配器 &#x1f393;Stack栈 &#x1f6a9;Stack的介绍 &#x1f6a9;Stack的基本使用 &#x1f6a9;Stack底层实现 &#x1f393;queue队列 &#x1f6a9;queue的介绍 &#x1f6a9;queue的基本使用 &#x1f6a9;queue的底层实现 &#x1…

【C++】C++的IO流

一、C语言的输入与输出 C 语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;读取数据&#xff0c;并将值存放在变量中。printf()&#xff1a;将指定的文字/字符串输出到标准输出设备&#xff…

李沐深度学习-线性回归从零开始

# 核心Tensor&#xff0c;autograd import torch from IPython import display import numpy as np import random from matplotlib import pyplot as pltimport syssys.path.append(路径) from d2lzh_pytorch import * backward()函数:一次小批量执行完在进行反向传播 线性回归…

Java如何做到无感知刷新token含示例代码(值得珍藏)

1. 前言 在系统页面进行业务操作时&#xff0c;有时会突然遇到应用闪退&#xff0c;并被重定向至登录页面&#xff0c;要求重新登录。此问题的出现&#xff0c;通常与系统中用于存储用户ID和token信息的Redis缓存有关。具体来说&#xff0c;这可能是由于token过期所导致的身份…

容器部署的nextcloud配置onlyoffice时开启密钥

容器部署的nextcloud配置onlyoffice时开启密钥 配置 进入onlyoffice容器 docker exec -it 容器id bash编辑配置vi /etc/onlyoffice/documentserver/local.json enable设置为true&#xff0c;并配置secret 重启容器&#xff0c;并将配置的密钥填入nextcloud密钥页面 docker r…

复杂字幕特效SDK,重塑视频字幕新体验

字幕特效已经成为了提升视频品质、增强观众体验的重要手段。美摄科技作为行业领先的技术提供商&#xff0c;近期推出的复杂字幕特效SDK&#xff0c;更是引领了这一领域的创新潮流。 美摄科技复杂字幕特效SDK&#xff0c;不仅具备了电影级别的字幕功能&#xff0c;更实现了众多…

系统学习Python——警告信息的控制模块warnings:常用函数-[warnings.warn]

分类目录&#xff1a;《系统学习Python》总目录 函数 warnings.warn(message, categoryNone, stacklevel1, sourceNone, \*, skip_file_prefixesNone) 常被用于引发警告、忽略或者触发异常。 参数 如果给出category参数&#xff0c;则必须是警告类别类 &#xff1b;默认为U…

【全网最全】2024华数杯国际赛B题成品论文50页+1-4问高质量代码+完整数据集+建模过程+保姆级教学

基于数据分析下的光伏发电 摘 要&#xff08;完整版在文末&#xff09; 根据最新数据&#xff0c;中国的总发电量超过20万亿千瓦时&#xff0c;总体排名世界第一&#xff0c;而光伏发电是一种重要的可再生能源&#xff0c;可以将太阳能转化为电能可以减少对传统能源的依赖&…

VBA窗体跟随活动单元格【简易版】(2/2)

上一篇博客&#xff08;文章连接如下&#xff09;中使用工作表事件Worksheet_SelectionChange实现了窗体跟随活动单元格的动态效果。 VBA窗体跟随活动单元格【简易版】(1/2) 为了在用户滚动工作表窗体之后仍能够实现跟随效果&#xff0c;需要使用Application.Windows(1).Visibl…

Nginx 常用的基础配置(前端相关方面)

Nginx配置前端 web 服务这篇文章&#xff1b;希望能够帮助更多的朋友。 基础配置 user root; worker_processes 1;events {worker_connections 10240; }http {log_format $remote_addr - $remote_u…

归并排序详解

目录 ​&#x1f4a1;基本思想 &#x1f4a1;图文介绍 &#x1f4a1;动图演示 &#x1f4a1;过程解释 &#x1f4a1;代码实现 &#x1f4a1;递归实现 &#x1f4a1;非递归实现 &#x1f4a1;总结 &#x1f4a1;基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是…

数据结构--串

本文为复习的草稿笔记&#xff0c;&#xff0c;&#xff0c;有点乱 1. 串的基本概念和基本操作 串是由零个或多个字符组成的有限序列 2. 串的存储结构 3.串的应用 模式匹配 BF算法&#xff08;简单匹配算法 穷举法 算法思路&#xff1a;从子串的每一个字符开始依次与主串…

深耕文档型数据库12载,SequoiaDB再开源

1月15日&#xff0c;巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进&#xff0c;全面解读了SequoiaDB包括在高可用、安全、实时、易用性四个方向的技术特性&#xff0c;宣布了2024年面向技术社区的开…

无法打开浏览器开发者工具的可能解决方法

网页地址: https://jx.xyflv.cc/?url视频地址url 我在抖音里面抓了一个视频地址, 获取到响应的json数据, 找到里面的视频地址信息 这个网站很好用: https://www.jsont.run/ 可以使用js语法对json对象操作, 找到所有视频的url地址 打开网页: https://jx.xyflv.cc/?urlhttps:…

【Linux C | 文件操作】目录相关操作 | mkdir、rmdir、opendir、readdir、closedir、getcwd、chdir

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…