leetcode 106. 从中序与后序遍历序列构造二叉树-java实现

题目所属分类

和上一题类似

原题链接

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

代码案例:leetcode 106. 从中序与后序遍历序列构造二叉树-java实现_第1张图片

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]
示例 2:

题解

时间复杂度 O(n)
leetcode 106. 从中序与后序遍历序列构造二叉树-java实现_第2张图片
y就是这边的k

 
class Solution {
    Map<Integer,Integer> map = new HashMap<>();
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        int n = inorder.length;
        for(int i = 0 ; i < n ; i++){
            map.put(inorder[i],i);
        }
        return build(inorder,postorder,0,n-1,0,n-1);
    }
    public TreeNode build(int[] inorder , int[] postorder , int pl , int pr , int il , int ir){
        if(pl > pr ) return null ;
        TreeNode root = new TreeNode(postorder[pr]);
        int k = map.get(postorder[pr]) ;
        root.left=build(inorder,postorder,pl,pl+k-1-il,il,k-1);
        root.right=build(inorder,postorder,pl+k-il,pr-1,k+1,ir);
        return root;
    }
}

你可能感兴趣的:(LeetCode,1024程序员节,leetcode刷题笔记,leetcode,算法,java)