题解 | 重建二叉树

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

import java.util.*;
public class Solution {

    // 根据前序遍历和中序遍历来重建二叉树
    // 前序序列可以找到每一个树(子树)的根节点,中序遍历可以根据根节点的位置分出左右子树的所有节点
    // 通过递归,可以完整重建二叉树

    public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) {
        // 注意这里的递归出口条件,整个过程中preorder和vinorder的长度都是一样的,当长度为0时就代表树已经被重建好了
        if(preOrder.length == 0 ) return null;
        
        TreeNode root = new TreeNode(preOrder[0]);
        

        for (int i = 0; i < vinOrder.length; i++) {
            if (vinOrder[i] == preOrder[0]) {
                root.left = reConstructBinaryTree(Arrays.copyOfRange(preOrder, 1, i + 1),
                                                  Arrays.copyOfRange(vinOrder, 0, i));
                root.right = reConstructBinaryTree(Arrays.copyOfRange(preOrder, i + 1,
                                                   preOrder.length), Arrays.copyOfRange(vinOrder, i + 1, vinOrder.length));
                break;
            }
        }
        return root;
    }
}

全部评论

相关推荐

在看牛客的社畜很积极:身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务