从前序与中序遍历序列构造二叉树

简介: 从前序与中序遍历序列构造二叉树

class TreeNode {

int val;
TreeNode left;
TreeNode right;

TreeNode(int x) {
    val = x;
}

}

public class Solution {

public TreeNode buildTree(int[] preorder, int[] inorder) {
    int preLen = preorder.length;
    int inLen = inorder.length;
    if (preLen != inLen) {
        throw new RuntimeException("Incorrect input data.");
    }
    return buildTree(preorder, 0, preLen - 1, inorder, 0, inLen - 1);
}

private TreeNode buildTree(int[] preorder, int preLeft, int preRight,
                           int[] inorder, int inLeft, int inRight) {
    // 因为是递归调用的方法,按照国际惯例,先写递归终止条件
    if (preLeft > preRight || inLeft > inRight) {
        return null;
    }
    // 先序遍历的起点元素很重要
    int pivot = preorder[preLeft];
    TreeNode root = new TreeNode(pivot);
    int pivotIndex = inLeft;
    // 严格上说还要做数组下标是否越界的判断 pivotIndex < inRight
    while (inorder[pivotIndex] != pivot) {
        pivotIndex++;
    }
    root.left = buildTree(preorder, preLeft + 1, pivotIndex - inLeft + preLeft,
            inorder, inLeft, pivotIndex - 1);
    root.right = buildTree(preorder, pivotIndex - inLeft + preLeft + 1, preRight,
            inorder, pivotIndex + 1, inRight);
    return root;
}

}

相关文章
|
6月前
|
Java C++ 索引
leetcode-106:从中序与后序遍历序列构造二叉树
leetcode-106:从中序与后序遍历序列构造二叉树
49 0
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
61 0
|
26天前
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
21_从中序与后序遍历序列构造二叉树
21_从中序与后序遍历序列构造二叉树
|
6月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
46 0
|
11月前
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
87 1
|
11月前
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
72 1
|
C++
力扣 - 106、从中序与后序遍历序列构造二叉树
力扣 - 106、从中序与后序遍历序列构造二叉树
102 0
|
机器学习/深度学习
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树
每日三题 对称二叉树 从前序与中序遍历序列构造二叉树 不同的二叉搜索树
93 4
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树