力扣105---从前序与中序序列中构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

输入: preorder = 3,9,20,15,7, inorder = 9,3,15,20,7

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

示例 2:

输入: preorder = -1, inorder = -1

输出: -1

代码:

java 复制代码
/**
 * 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){//判断数组长度,如果为零,说明没有了
            return null;
        }
        int rootValue=preorder[0];//从先序遍历中获得父亲结点的值
        TreeNode node=new TreeNode(rootValue);//创建结点
        for(int i=0;i<inorder.length;i++){
            if(inorder[i]==rootValue){//从中序遍历中找到父亲节点的值,划分为左子树和右子树
                int[] preLeft = Arrays.copyOfRange(preorder, 1, i+1);//先序遍历中左子树的部分
                int[] preRight = Arrays.copyOfRange(preorder, i+1, preorder.length);//先序遍历中右子树的部分

                int[] inLeft = Arrays.copyOfRange(inorder, 0, i);//中序遍历中左子树的部分
                int[] inRight = Arrays.copyOfRange(inorder, i + 1, inorder.length);//中序遍历中左子树的部分

                node.left = buildTree(preLeft, inLeft);//递归调用左子树
                node.right=buildTree(preRight,inRight);//递归调用右子树
                break;//减少不必要的遍历
            }
        }
        return node;
    }
}
相关推荐
悠仁さん5 小时前
【C++】哈希表
c++·算法·散列表
码少女5 小时前
数据结构——图的基础
数据结构
地平线开发者6 小时前
点云算法整理与常用计算模块:从数据到模型,再到工程与量化
算法·自动驾驶
Severus_black7 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
武子康8 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
秋天的怀念_David9 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
二本咕咕-机械转码9 小时前
FreeRTOS深入解析(八)IPC机制之FromISR详解
数据结构·单片机·链表
Rain的Java大神之路10 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
NEFU_Jyj11 小时前
贝尔数(组合数学)
算法
1-1=011 小时前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore