🌗 106. 从䞭序䞎后序遍历序列构造二叉树

吞䜛童子2022幎10月10日
  • algorithm
  • tree
小于 1 分钟

🌗 106. 从䞭序䞎后序遍历序列构造二叉树

隟床: 🌗

问题描述

img_14.png


解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        // 思路
        // 根据后序遍历的根节点扟到䞭序遍历对应䜍眮
        int len = inorder.length;
        return mySol(inorder, postorder, 0, len - 1, 0, len - 1);
    }

    private TreeNode mySol(int[] inorder, int[] postorder, int inl, int inr, int pl, int pr) {
        // 递園终止条件
        if(inl > inr) {
            return null;
        }
        int val = postorder[pr];
        TreeNode root = new TreeNode(val);
        if(inl == inr) {
            return root;
        }
        // inl < inr
        int index = inl;
        while(index <= inr) {
            if(inorder[index] == val) {
                break;
            } else {
                index ++;
            }
        }
        root.left = mySol(inorder, postorder, inl, index - 1, pl, index + pl - inl - 1);
        root.right = mySol(inorder, postorder, index + 1, inr, index + pl - inl, pr - 1);
        return root;
    }
}

蟓出

img_13.png

䞊次猖蟑于: 2022/10/10 䞋午8:43:48
莡献者: liuxianzhishou