leetcode 106.从中序与后续遍历序列构造二叉树

ops/2024/9/22 10:56:54/

思路:其实和根据前序遍历和中序遍历来构造二叉树是一样的思路,我们那道题首先确定的就是根节点,也就是说,根节点的位置是很重要的,我们需要知道根节点的位置在哪。前序遍历的特点就是:中左右;中序遍历的特点就是:左中右。我们可以看到,这两种遍历的前两个遍历都是中和左子树,我们就可以联想到,这两种遍历都是遍历一样的结点但是顺序不一样而已。我们从中找到根节点的位置,根据中序遍历,我们就知道了左右子树都是什么元素了。然后就顺藤摸瓜一直找下去就行了。

这里也是一样,后序遍历的特点就是:左右中;而中序遍历是:左中右。他们的后两个是一样的序列但是顺序不一样,我们从中找到根节点也就找到了左右子树在哪了。中序遍历中根节点的位置其实就是后序遍历右子树开始遍历的位置。

然后我们递归到左右子树再查找他们的根节点,然后以此类推。。。

本质上讲就是为了找根节点而已。

我们按照分冶并且递归的办法进行传递构造树即可。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {TreeNode root=null;root=bianli(root,inorder,postorder);return root;}public TreeNode bianli(TreeNode t,int []a,int []b){if(a.length==0||b.length==0)return null;for(int i=0;i<a.length;i++){if(b[b.length-1]==a[i]){TreeNode tmp=new TreeNode(a[i]);t=tmp;int []a_l=Arrays.copyOfRange(a,0,i);int []a_r=Arrays.copyOfRange(a,i+1,a.length);int []b_l=Arrays.copyOfRange(b,0,i);int []b_r=Arrays.copyOfRange(b,i,b.length-1);t.left=bianli(t.left,a_l,b_l);t.right=bianli(t.right,a_r,b_r);}}return t;}
}


http://www.ppmy.cn/ops/113566.html

相关文章

【论文阅读】Face2Diffusion for Fast and Editable Face Personalization

code&#xff1a;mapooon/Face2Diffusion: [CVPR 2024] Face2Diffusion for Fast and Editable Face Personalization https://arxiv.org/abs/2403.05094 (github.com) 论文 介绍 目标&#xff1a;向 T2I 模型不知道的图像中插入特定概念&#xff08;例如某人的脸&#xff…

无法创建新的堆栈防护界面

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程

一、项目概述 1.1 项目目标和用途 本项目旨在基于嵌入式STM32MP157开发板&#xff0c;搭建一个系统软硬件开发平台&#xff0c;以Linux操作系统为基础&#xff0c;研发一个完整的人脸识别系统。该系统可以用于安防监控、考勤管理等应用场景&#xff0c;实现对人脸的实时检测与…

在 Android 中,自定义 View 的绘制流程

目录 1. 测量阶段 (onMeasure()) 2. 布局阶段 (onLayout()) 3. 绘制阶段 (onDraw()) 总体绘制流程 注意事项 示例总结 参考资料 在 Android 中&#xff0c;自定义 View 的绘制流程主要包括测量、布局、绘制三个关键步骤。具体来说&#xff0c;自定义 View 的绘制涉及重写…

C++析构函数为什么要为虚函数?

目录 1.引言 2.原因 3.示例分析 4.总结 1.引言 在C中&#xff0c;将析构函数声明为虚函数&#xff08;virtual destructor&#xff09;的主要原因是为了支持多态删除&#xff08;polymorphism with deletion&#xff09;。多态允许通过基类指针或引用来操作派生类对象&…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

【Kubernetes】常见面试题汇总(二十一)

目录 65.简述 Kubernetes 中&#xff0c;如何使用 EFK 实现日志的统一管理&#xff1f; 66.简述 Kubernetes 如何进行优雅的节点关机维护&#xff1f; 67.简述 Kubernetes 集群联邦&#xff1f; 65.简述 Kubernetes 中&#xff0c;如何使用 EFK 实现日志的统一管理&#xff1…

自动登录 RPA 的进阶:滑块验证的巧妙实现

​在RPA的众多应用场景的探索中&#xff0c;自动登录是一个至关重要的环节&#xff0c;它为后续的自动化操作奠定了基础。然而&#xff0c;当我们面对滑块验证这一常见的挑战时&#xff0c;常常会感到困惑和无从下手。本文就来分享自动登录RPA的进阶----滑块验证如何实现。 在…