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

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

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;
}

}

相关文章
|
2月前
|
Java C++ 索引
leetcode-106:从中序与后序遍历序列构造二叉树
leetcode-106:从中序与后序遍历序列构造二叉树
33 0
|
9月前
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
36 0
|
2月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
37 0
|
7月前
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
52 1
|
7月前
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
48 1
|
C++
力扣 - 106、从中序与后序遍历序列构造二叉树
力扣 - 106、从中序与后序遍历序列构造二叉树
83 0
|
算法
【算法】二叉排序树:创建二叉树,并以中序遍历输出
【算法】二叉排序树:创建二叉树,并以中序遍历输出
193 0
|
存储 算法
二叉树的前序/中序/后序遍历—采用递归与迭代两种方法实现嗷
二叉树的前序/中序/后序遍历—采用递归与迭代两种方法实现嗷
leetcode 106 从中序和后续遍历序列构造二叉树
leetcode 106 从中序和后续遍历序列构造二叉树
72 0
leetcode 106 从中序和后续遍历序列构造二叉树