首页 > 其他分享 >889. 根据前序和后序遍历构造二叉树

889. 根据前序和后序遍历构造二叉树

时间:2024-03-27 16:48:25浏览次数:23  
标签:preorder postMap leftCount int 前序 二叉树 preLeft 889 postorder

给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。

如果存在多个答案,您可以返回其中 任何 一个。

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

class Solution {
    public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {
        int n = preorder.length;
        Map<Integer, Integer> postMap = new HashMap<Integer, Integer>();
        for (int i = 0; i < n; i++) {
            postMap.put(postorder[i], i);
        }
        return dfs(preorder, postorder, postMap, 0, n - 1, 0, n - 1);
    }

    public TreeNode dfs(int[] preorder, int[] postorder, Map<Integer, Integer> postMap, int preLeft, int preRight, int postLeft, int postRight) {
        if (preLeft > preRight) {
            return null;
        }
        int leftCount = 0;
        if (preLeft < preRight) {
            leftCount = postMap.get(preorder[preLeft + 1]) - postLeft + 1;
        }
        return new TreeNode(preorder[preLeft],
            dfs(preorder, postorder, postMap, preLeft + 1, preLeft + leftCount, postLeft, postLeft + leftCount - 1),
            dfs(preorder, postorder, postMap, preLeft + leftCount + 1, preRight, postLeft + leftCount, postRight - 1));
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-postorder-traversal/solutions/2645281/gen-ju-qian-xu-he-hou-xu-bian-li-gou-zao-6vzt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:preorder,postMap,leftCount,int,前序,二叉树,preLeft,889,postorder
From: https://www.cnblogs.com/tianyiya/p/18099633

相关文章

  • Leetcode 翻转二叉树
    Day11第三题目前ac最快的一道题/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNo......
  • Leetcode 二叉树的最大深度
    Day11第二题深度优先搜索在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在\(\mathcal{O}(1)\)时间内计算出当前二叉树的最大深度。classSolution{publicintmaxDepth(TreeNoderoot){if(root==null){retur......
  • 代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众
    文档链接:https://programmercarl.com/LeetCode530.二叉搜索树的最小绝对差题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/思路:二叉搜索树记得使用中序遍历最方便!注意是二叉搜索树,二叉搜索树可是有序的。遇到在二叉搜索树上求什么最值啊,差值之......
  • 代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    文档链接:https://programmercarl.com/LeetCode110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/思路:这里强调一波概念:二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数......
  • 代码随想录第20天| 654.最大二叉树 617.合并二叉树
     654.最大二叉树654.最大二叉树-力扣(LeetCode)代码随想录(programmercarl.com)又是构造二叉树,又有很多坑!|LeetCode:654.最大二叉树_哔哩哔哩_bilibili给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 ......
  • 根据后序(前序)和中序构造二叉树(力扣105,106)
    文章目录题目前知怎样通过中序和前(后)序构造二叉树HashMap题解一、思路二、解题方法三、Code总结题目Problem:105.从前序与中序遍历序列构造二叉树Problem:106.从中序与后序遍历序列构造二叉树中后:给定两个整数数组inorder和postorder,其中inorder......
  • leetcode106从中序与后序遍历序列构造二叉树
    目录1.解题关键2.思路3.变量名缩写与英文单词对应关系4.算法思路图解5.代码本文针对原链接题解的比较晦涩的地方重新进行说明解释原题解链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/solutions/50561/tu-jie-gou-z......
  • [数据结构]二叉树的建立与遍历(递归)
    一、二叉树的遍历与建立首先我们拥有如下二叉树:要了解二叉树遍历,我们得先了解二叉树的三种遍历方式:前序遍历,中序遍历,后序遍历1.前序遍历前序遍历:根,左子树,右子树遍历的结果就是:1248NN9NN510NN11NN36NN7NN2.中序遍历中序遍历:左子树根......
  • 数据结构----认识树和二叉树
    数据结构----认识树和二叉树树和二叉树是计算机科学中重要的数据结构,它们提供了一种分层的组织方式,并被广泛应用于各个领域。本篇博客将介绍树的概念、结构,以及二叉树的特殊形式,以帮助读者对树和二叉树有更深入的理解。1.什么是树?树是一种非线性的数据结构,由节点组成,呈......
  • 树和二叉树知识总结
    文章目录树树的定义树的其他表示方法树的基本术语树结构和线性结构的比较二叉树二叉树的定义二叉树的抽象数据类型定义二叉树的性质满二叉树完全二叉树完全二叉树的性质完满二叉树二叉树的存储结构顺序存储结构链式存储结构二叉树的遍历三种遍历方式递归实现非递归实......