题解 | #重建二叉树#

重建二叉树

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

package com.hhdd.数据结构.树;

/**
 * @Author huanghedidi
 * @Date 2022/8/23 22:44
 */
public class 重建二叉树 {
    /**
     * 根据前序遍历和中序遍历重建一棵二叉树
     *
     * @param pre
     * @param vin
     * @return
     */
    public TreeNode reConstructBinaryTree(int[] pre, int[] vin) {
        if (pre.length == 0 || vin.length == 0){
            return null;
        }
        return rebuild(pre, 0, pre.length - 1, vin, 0, vin.length - 1);
    }

    public TreeNode rebuild(int[] pre, int preStart, int preEnd, int[] vin, int vinStart, int vinEnd) {
        TreeNode root = new TreeNode(pre[preStart]);
        // 在中序遍历中可以找到前序遍历的节点,节点位置往前是左子树,节点位置往后是右子树
        int midIndex = vinStart;
        for (int i = vinStart; i <= vinEnd; i++) {
            if (vin[i] == pre[preStart]) {
                midIndex = i;
            }
        }
        int leftLength = midIndex - vinStart;
        int rightLength = vinEnd - midIndex;
        // 判断是否有左右子树
        if (leftLength > 0) {
            root.left = rebuild(pre, preStart + 1, preStart + leftLength, vin, vinStart, midIndex - 1);
        }
        if (rightLength > 0) {
            root.right = rebuild(pre, preStart + leftLength + 1, preEnd, vin, midIndex + 1, vinEnd);
        }
        return root;
    }
}

全部评论

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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