🌗 105. 从前序䞎䞭序遍历序列构造二叉树

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

🌗 105. 从前序䞎䞭序遍历序列构造二叉树

隟床: 🌗

问题描述

img_12.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[] preorder, int[] inorder) {
        // 思路
        // 根据先序遍历扟到区闎的根节点对应䞭序遍历的䜍眮巊蟹䞺巊子树右蟹䞺右子树
        int len = preorder.length;
        return mySol(preorder, inorder, 0, len - 1, 0, len - 1);
    }

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

蟓出

img_11.png

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