java刷题--105从前序与中序遍历序列构造二叉树

Posted Anrys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java刷题--105从前序与中序遍历序列构造二叉树相关的知识,希望对你有一定的参考价值。

java刷题--105从前序与中序遍历序列构造二叉树

题目

在这里插入图片描述

代码

class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return helper(0, 0, inorder.length - 1, preorder, inorder);
    }
    //前序pre 中序in
    public TreeNode helper(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) {
        if (preStart > preorder.length - 1 || inStart > inEnd) return null;
        TreeNode root = new TreeNode(preorder[preStart]);
        int inIndex = 0; // Index of current root in inorder
        for (int i = inStart; i <= inEnd; i++) {
            if (inorder[i] == root.val) {
                inIndex = i;
            }
        }
        root.left = helper(preStart + 1, inStart, inIndex - 1, preorder, inorder);
        root.right = helper(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder);
        return root;
    }
}
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(preorder.length==0||inorder.length==0){
            return null; //返回必须是一个Treenode类型
        }
        TreeNode root=new TreeNode (preorder[0]);
        for(int i=0;i<preorder.length;i++){
            if(preorder[0]==inorder[i]){
                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));
                break;
            }
        }return root;
    }
}

结果

在这里插入图片描述

以上是关于java刷题--105从前序与中序遍历序列构造二叉树的主要内容,如果未能解决你的问题,请参考以下文章

刷题-力扣-105. 从前序与中序遍历序列构造二叉树

[JavaScript 刷题] 树 - 从前序与中序遍历序列构造二叉树, leetcode 105

Leetcode刷题Python105. 从前序与中序遍历序列构造二叉树

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

[98]验证二叉搜索树&[105]从前序与中序遍历序列构造二叉树

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