0
点赞
收藏
分享

微信扫一扫

分治算法思想

分治思想

leetcode105从前中序遍历序列中构造二叉树

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

/**
 * 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 {
    HashMap<Integer, Integer> map = new HashMap<>();
    ;
    int N;
    int[] pre, in;

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if (preorder.length == 0) return null;
        pre = preorder;
        in = inorder;
        N = inorder.length;
        for (int i = 0; i < N; i++) {// 空间换时间
            map.put(inorder[i], i);
        }
        return modify(0, N - 1, 0, N - 1);
    }

    private TreeNode modify(int preStart, int preEnd, int inStart, int inEnd) {
        if (preStart > preEnd) return null;
        int leftNum = map.get(pre[preStart]) - inStart;
        return new TreeNode(pre[preStart],
                modify(preStart + 1, preStart + leftNum, inStart, inStart + leftNum - 1),
                modify(preStart + leftNum + 1, preEnd, inStart + leftNum + 1, inEnd));
    }
}
举报

相关推荐

0 条评论