首页 > 其他分享 >105. 106. 从中序与后序遍历序列构造二叉树

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

时间:2024-05-05 16:44:41浏览次数:29  
标签:preorder right TreeNode val int inorder 二叉树 106 105

https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

思路和106. 从中序与后序遍历序列构造二叉树相同

/**
 * 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[] preorder, int[] inorder) {
        if(preorder.length==0 || inorder.length==0)return null;
        return build(preorder,inorder,0,preorder.length,0,inorder.length);
    }
    // 左闭右开
    public TreeNode build(int[] preorder,int[] inorder,int preStart,int preEnd,int inStart,int inEnd)
    {
        if(preStart==preEnd)return null;
        TreeNode root = new TreeNode(preorder[preStart]);
        
        int mid;
        for(mid=inStart;mid<inEnd;mid++)
            if(inorder[mid]==preorder[preStart])break;

        int leftInStart = inStart;
        int leftInEnd = mid;
        int rightInStart = mid+1;
        int rightInEnd = inEnd;

        
        int leftPreStart = preStart+1;
        // leftInEnd-leftInStart 是中序左子树长度
        System.out.println(leftInEnd-leftInStart);
        int leftPreEnd = leftPreStart + leftInEnd - leftInStart;
        int rightPreStart = leftPreEnd;
        int rightPreEnd = preEnd;

        root.left = build(preorder,inorder,leftPreStart,leftPreEnd,leftInStart,leftInEnd);
        root.right = build(preorder,inorder,rightPreStart,rightPreEnd,rightInStart,rightInEnd);

        return root;

    }
}

 

标签:preorder,right,TreeNode,val,int,inorder,二叉树,106,105
From: https://www.cnblogs.com/lxl-233/p/18173617

相关文章

  • 106. 从中序与后序遍历序列构造二叉树(leetcode)
    https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/要点是明白中序和后序如何构造二叉树的,并且需要理清当前递归函数的语义,不要一开始就陷入细节,而是思考整棵树与其左右子树的关系,语义是:即构造当前节点,给当前节点左右子树赋值,明......
  • 二叉树相关的三个常见算法题
    算法题一//计算一颗二叉树的所有节点的数量intBinaryTree_CountNode(Tnode_t*root){intn1,n2;if(NULL==root){return0;}n1=BinaryTree_CountNode(root->lchild);n2=BinaryTree_CountNode(root->rchild);returnn1+......
  • rt1052点亮0.96寸spi屏
    一,前言目的是用rgb屏,但是rgb屏硬件还没准备好,所以要先学习下lvgl上位机,但是学习完要烧录到屏中看效果,所以我今天就先点亮spi屏。找了之前stm32时候点亮频的lcd驱动进行的移植,cs我不是gpio控制的,所以注释了2行,看起来无影响。二,说明0.96存spi驱动的LCD屏ST7735S驱动成功,已经备份......
  • 二叉树前中后序遍历 迭代法 只需一招!
    核心思想以中序遍历为例在迭代法中我们拿到1节点由于有左孩子我们就会推入2节点,2节点又有左孩子,所以我们推入4,然后弹出2节点,由于这是第二次访问2节点,也就意味着左子树已经去过了,所以推入5节点。那么我们模拟一下栈的变化假设左边为栈顶。1->21->4......
  • 【每日一题】感染二叉树需要的总时间
    2385.感染二叉树需要的总时间给你一棵二叉树的根节点root,二叉树中节点的值互不相同。另给你一个整数start。在第0分钟,感染将会从值为start的节点开始爆发。每分钟,如果节点满足以下全部条件,就会被感染:节点此前还没有感染。节点与一个已感染节点相邻。返回感染......
  • 二叉树笔试题解题思路
    数据结构二叉树笔试题:解题思路:1.判断是否为空树,若为空树,则返回0;2.定义两个指针备份根结点地址,定义两个整型变量a,b并初始化为0,记录左右子树的深度;先对根结点的左子树进行遍历,若根结点的左结点不为NULL,则a++,把根结点的左结点赋值为新的根结点,再进行上述操作,若根结点的左结点......
  • 数据结构-二叉树的初始化
    数据结构-二叉树的相关初始化/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/29*@version1.0:在下坂本,有何贵干*@property:none......
  • MUR1060D-ASEMI开关电源专用MUR1060D
    编辑:llMUR1060D-ASEMI开关电源专用MUR1060D型号:MUR1060D品牌:ASEMI封装:TO-252正向电流(IF):10A反向电压(VRRM):600V正向电压(VF):1.30V工作温度:-55°C~150°C恢复时间:35ns芯片个数:1引脚数量:4芯片尺寸:86mil浪涌电流(IFMS):170AMUR1060D特性:恢复时间短性能稳定正向压降低参数一......
  • 笔记本1050ti跑autoformer模型,环境搭建过程
    ##1、选显卡对应得驱动程序https://www.nvidia.com/Download/index.aspxnotebook是笔记本,下载类型选sd。不更新驱动会报:RuntimeError:TheNVIDIAdriveronyoursystemistooold(foundversion8000).PleaseupdateyourGPUdriverbydownloadingandinstallinganew......
  • 笔记本1050ti运行DLinear模型遇到的问题
    1、windows没法运行shgitbash可以,但我需要在conda环境中,使用sh运行脚本,所以应该在安装conda后,先配环境变量,然后在gitbash窗口中执行condainitbash,就可以用在bash窗口中通过condaactivate进入conda环境了。2、运行sh,报错加载不到模块看报错最后一行上面的模块,pipuninsta......