`

Binary Tree的题目总结(四)

阅读更多
本文列举leetcode中两个关于构造二叉树的题目。
1,Construct Binary Tree from Inorder and Postorder Traversal
已知中序遍历序列,和后序遍历序列,通过这两个序列构造二叉树。

通过后序遍历序列的最后元素,我们总能找到根节点,然后通过这个值可以将中序序列分为两部分,然后在递归左右两部分。代码如下:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if(inorder == null || postorder == null || inorder.length == 0 || postorder.length == 0) 
            return null;
        TreeNode root = new TreeNode(postorder[postorder.length-1]);
        int i = 0;
        for(i = 0; i < inorder.length; i++) {
            if(inorder[i] == postorder[postorder.length-1])
                break;
        }
        int[] lp = Arrays.copyOfRange(postorder, 0, i);
        int[] li = Arrays.copyOfRange(inorder, 0, i);
        int[] rp = Arrays.copyOfRange(postorder, i, postorder.length - 1);
        int[] ri = Arrays.copyOfRange(inorder, i + 1, inorder.length);
        root.left = buildTree(li, lp);
        root.right = buildTree(ri, rp);
        return root;
    }
}


2,Construct Binary Tree from Preorder and Inorder Traversal
已知中序遍历序列和前序遍历序列,构造二叉树

和上一题类似,我们从前序遍历序列中的第一位元素,来将中序序列分为两部分,即分别为根节点的左子树和右子树,递归左子树和右子树,代码如下:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(preorder == null || inorder == null || preorder.length == 0) return null;
        TreeNode root = new TreeNode(preorder[0]);
        int i = 0;
        for(i = 0; i < inorder.length; i++) {
          if(inorder[i] == preorder[0])
                break;
        }
        root.left = buildTree(Arrays.copyOfRange(preorder,1, i+1), Arrays.copyOfRange(inorder,0,i));
        root.right = buildTree(Arrays.copyOfRange(preorder, i+1, preorder.length), Arrays.copyOfRange(inorder, i+1, inorder.length));
        return root;
    }
}
分享到:
评论

相关推荐

    binarytree.rar

    二叉树是一种在计算机科学中广泛使用的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右...解压“binarytree.rar”,查看其中的文件,理解数据结构,并根据给定的描述编写代码,以实现二叉树的前序遍历。

    leetcode的题目:Balanced Binary Tree

    在LeetCode的"Balanced Binary Tree"题目中,通常要求判断给定的二叉树是否是平衡的。这个问题可以通过递归或迭代的方式来解决。递归方法是分别检查左子树和右子树是否平衡,以及它们的高度。迭代方法则可以使用层次...

    recover-the-binary-tree.zip_The Tree

    题目中的"recover-the-binary-tree.zip_The Tree"文件包含了一个名为"recover the binary tree.cpp"的源代码文件,这很可能是实现这个恢复过程的C++程序。为了理解并执行这个过程,我们需要了解以下步骤: 1. **...

    MengZhaoFly#sword-byteDance-fe#二叉树的所有路径(binary-tree-paths)1

    题目二叉树所有路径题解* Definition for a binary tree node.* function TreeNode(val) {* @para

    leetcode伪代码-mergo-two-binary-tree:合并二叉树

    leetcode伪代码merge-two-binary-tree 题目解读: 题目来源: 原文: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the...

    LeetCode和剑指offer中的算法题的题目和解法 和 常见算法汇总

    1. Math Implementation Questions(数学实现题) ...5.1 Maximum Depth of Binary Tree(二叉树的深度) 5.2 Invert Binary Tree(反转二叉树) 5.3... 5.4... 5.5... 6. String Questions(字符串相关问题)

    minimum-depth-of-binary-tree.rar_leetcode

    在提供的"minimum depth of binary tree"代码中,可能包含了上述的一种或多种解冑策略。解冑代码应该能够处理各种类型的二叉树,包括平衡树和高度不均衡的树,同时具有良好的时间复杂度和空间复杂度。具体实现细节和...

    leetcode110-BinaryTree_HeightBalanced:力扣110

    至于提供的压缩包文件`BinaryTree_HeightBalanced-master`,它很可能包含了该问题的解决方案源代码,可能是用Python或其他编程语言实现的。解压后,你将能够看到具体的实现细节,包括如何创建二叉树节点、如何进行...

    2018年最新Google Onsite面经总结1

    从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...

    Leetcode题目+解析+思路+答案.pdf

    - **Convert Sorted List/Array to Binary Search Tree**:将有序列表或数组转换为二叉搜索树。 - **Path Sum II**:寻找所有从根节点到叶节点的路径,其路径和等于给定的目标值。 - **Flatten Binary Tree to ...

    [数据结构与算法]JAVA二叉树题目总结(包含常见题目部分LeetCode题解)

    在IT领域,数据结构与算法是编程基础的重要组成部分,...总结,Java中的二叉树题目不仅要求对数据结构有深入理解,还需要灵活运用算法。不断练习和分析这些题目,能够帮助你提高编程技巧,增强在实际工作中的竞争力。

    前端大厂最新面试题-binary-indexed-tree.docx

    **二叉索引树(Binary Indexed Tree,BIT)**,又称 Fenwick 树,是数据结构中的一个重要概念,尤其在前端工程师的面试中常被问到。它是一种高效的数据结构,用于快速处理数组中区间的求和问题以及部分更新操作。在...

    leetcode卡-leetcode_practices_learncard_binarytree:我的leetcode练习二叉树学习卡

    本资源“leetcode_practices_learncard_binarytree”是一份全面的二叉树学习卡片,作者通过Java8语言完成了所有相关题目,旨在帮助学习者深入理解二叉树及其相关算法。 一、二叉树基础 二叉树是一种非线性数据结构...

    浙江大学2018-19秋冬《数据结构基础》期末模拟练习21

    以下是一些关于数据结构和算法的重要知识点,基于题目提供的内容: 1. **图的性质** - 在图论中,一个图如果有每个顶点的度数都是偶数,或者只有两个顶点的度数是奇数,那么可以找到一个哈密顿回路,即一个通过每条...

    算法文档无代码一些与树有关的题目

    - 二叉搜索树(Binary Search Tree, BST):一种特殊的二叉树,其中每个节点的左子树只包含小于当前节点的数,每个节点的右子树只包含大于当前节点的数。 - 红黑树(Red-Black Tree):一种自平衡的二叉搜索树,每条...

    二叉树的直径(diameter-of-binary-tree)

    代码一的解决方案首先定义了一个`diameterOfBinaryTree`函数,它递归地计算每个子节点的最大深度,并返回当前节点的最大深度。在这个过程中,通过`depth`函数计算节点的深度,同时更新全局变量`max`,存储当前找到的...

    leetcode卡-leetcode_binary_tree:https://leetcode.com/explore/learn/card/

    这个标签可能意味着LeetCode的二叉树专题卡片内容是开源的,也就是说,可能有一个开源项目或者代码库(如“leetcode_binary_tree-master”)包含了这些题目的解决方案或者其他学习资源。开源意味着社区可以贡献、...

    leetcode题目分类

    从文档中可以看出,这些题目覆盖了各种类型的数据结构和算法,如数组(array)、链表(linked list)、字符串(string)、哈希表(hashtable)、栈(stack)、队列(queue)、二叉树(binary tree)、图(graph)、...

    题目推荐_刘汝佳.pptx

    构造类题目如"7401 - Binary Tree (简单)"和"7269 - Snake Carpet (简单)",测试的是考生对于数据结构的理解和构建能力,可能是要求设计和实现特定功能的二叉树或其它数据结构。 算法类题目是核心部分,包括了"6203...

Global site tag (gtag.js) - Google Analytics