0
点赞
收藏
分享

微信扫一扫

106. 从中序与后序遍历序列构造二叉树

在这里插入图片描述在这里插入图片描述在这里插入图片描述

public TreeNode buildTree(int[] inorder, int[] postorder) {
        return build(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
    }

    TreeNode build(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {
        if (postStart > postEnd) {  
            return null;    //若后序序列长度小于等于0,则直接返回
        }
        int rootVal = postorder[postEnd];   // root 节点对应的值就是前序遍历数组的第⼀个元素
        int index = 0;                      // rootVal 在中序遍历数组中的索引
        for (int i = inStart; i <= inEnd; i++) {
            if (rootVal == inorder[i]) {
                index = i;
                break;
            }
        }
        int leftSize = index - inStart;
        TreeNode root = new TreeNode(rootVal);      // 先构造出当前根节点
        // 递归构造左右⼦树
        root.left = build(inorder, inStart, index - 1, postorder, postStart, postStart + leftSize - 1);
        root.right = build(inorder, index + 1, inEnd, postorder, postStart + leftSize, postEnd - 1);
        return root;
    }
举报

相关推荐

0 条评论