首页 > 其他分享 >leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树(中等)

leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树(中等)

时间:2022-10-08 00:12:43浏览次数:80  
标签:Binary 遍历 后序 int 106 二叉树 inorder postorder

一、题目大意

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]

输出:[3,9,20,null,null,15,7]

示例 2:

输入:inorder = [-1], postorder = [-1]

输出:[-1]

提示:

  • 1 <= inorder.length <= 3000
  • postorder.length == inorder.length
  • -3000 <= inorder[i], postorder[i] <= 3000
  • inorder 和 postorder 都由 不同 的值组成
  • postorder 中每一个值都在 inorder 中
  • inorder 保证是树的中序遍历
  • postorder 保证是树的后序遍历

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

要求从中序和后序遍历的结果来重新建原二叉树,中序遍历顺序是左 根 右,后序遍历顺序是左 右 根,对于这种树的重建一般采用递归来做,由于后序的顺序的最后一个肯定是根,所以原二叉树的根节点可以知道,题目中给了一个很关键的条件就是树中没有相同元素,有了这个条件就可以在中序遍历中也定位出根节点的位置,并根据根节点的位置将中序遍历拆分为春熙路右两部分,分别对其递归调用原函数。

三、解题方法

3.1 Java实现

public class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        return helper(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
    }

    TreeNode helper(int[] in, int inL, int inR, int[] post, int postL, int postR) {
        if (inL > inR || postL > postR) {
            return null;
        }
        TreeNode node = new TreeNode(post[postR]);
        int i = 0;
        for (i = inL; i < in.length; i++) {
            if (in[i] == node.val) {
                break;
            }
        }
        node.left = helper(in, inL, i - 1, post, postL, postL + i - inL - 1);
        node.right = helper(in, i + 1, inR, post, postL + i - inL, postR - 1);
        return node;
    }
}

四、总结小记

  • 2022/10/7 明天又是新的一天

标签:Binary,遍历,后序,int,106,二叉树,inorder,postorder
From: https://www.cnblogs.com/okokabcd/p/16767553.html

相关文章

  • LeetCode - #144 二叉树的前序遍历
    前言我们社区陆续会将顾毅(Netflix增长,《iOS面试之道》作者,ACE职业健身教练。)的Swift算法题题解整理为文字版以方便大家学习与阅读。LeetCode算法到目前我们已经更新到......
  • .Net CLR GC plan_phase二叉树和Brick_table
    楔子别那么懒,勤快点。以下取自CLRPreView7.0。主题GC计划阶段(plan_phase)主要就两个部分,一个是堆里面的对象构建一颗二叉树(这颗二叉树的每个节点包含了诸如对象移动......
  • 平衡二叉树的平衡代码实现
    AVL树是一种平衡二叉树,得名于其发明者的名字(Adelson-Velskii以及Landis)。(可见名字长的好处,命名都能多占一个字母出来)。平衡二叉树递归定义如下:左右子树的高度差小于......
  • 数据结构-平衡二叉树的基本旋转
    1、AVL树(平衡二叉树)的定义平衡二叉树 全称叫做 平衡二叉搜索(排序)树,简称AVL树。英文:BalancedBinaryTree(BBT),注:二叉查找树(BST)AVL什么意思?AVL是大学教授G.M.A......
  • 二叉树与树、森林之间的转换
    一、成树、森林转换为二叉树树转化成二叉树的步骤:树中所有相邻兄弟结点之间加一条线对树中的每个结点只保留它与长子之间的连线,删除与其他孩子之间的连线以树的根结点......
  • 平衡二叉树板子(转载)
    #include<iostream>#include<cstdio>#defineMAXN100010usingnamespacestd;introot,tot;structSplay{intfa;intch[2];intval;intcn......
  • 树结构系列(二):平衡二叉树、AVL树、红黑树
    前面说到二叉树在极端情况下会退化成链表,那如何解决这个问题呢?答案是:树的平衡。我们通过树的平衡,使得左右子树的深度保持在较小范围内,从而保证二叉树的查询效率。这就是平......
  • 【mysql】关于命令SHOW CREATE TABLE <表名\G>报错问题:1064 - You have an error in
    1、首先该命令是用来查看表的详细信息加参数,是为了展示上更加直观  原因:使用第三方工具如Navicat,是不能带参数的,因为这种命令方式是命令行独有的,Navicat没有实现2、......
  • leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal 根据前
    一、题目大意给定两个整数数组,preorder和postorder,其中preorder是一个具有无重复值的二叉树的前序遍历,postorder是同一棵树的后序遍历,重构并返回二叉树。如果存......
  • 树和二叉树
    树的定义:树(Tree)是n(n>=0)个结点的有限集。若n=0,则称空树若n>0,则它满足如下两个条件:(1)有且只有一个特定的称为根(Root)的结点(2)其余结......