Leetcode随笔,中序遍历+后序遍历数组构建树

import java.util.HashMap;

/**
 * Definition for a binary tree node. public class TreeNode { int val; TreeNode
 * left; TreeNode right; TreeNode(int x) { val = x; } }
 */
class Solution {
    public TreeNode buildTree(int[] afterorder, int[] inorder) {
        int hb=0;
        int he=afterorder.length-1;
        int zb =0;
        int ze = inorder.length-1;
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<=ze;i++){
            map.put(inorder[i], i);
        }
        TreeNode treeNode = re( map,afterorder, hb, he, zb, ze);
        return treeNode;
    }

    public TreeNode re(HashMap map,int[] after,int hb,int he,int zb,int ze) {
        if(hb>he)return null;
        TreeNode mid = new TreeNode(after[he]);
        if(hb==he)return mid;
        int k = (int) map.get(after[he]);
        TreeNode left = re(map, after, hb, hb+k-zb-1, zb, k-1);
        TreeNode right = re(map, after, hb+k-zb, he-1, k+1, ze);
        mid.left = left;
        mid.right = right;
        return mid;
    }



    public static void main(String[] args) {
        Solution so = new Solution();
        int[] afterorder = new int[]{9,15,7,20,3};
        int[] inorder = new int[]{9,3,15,20,7};
        so.buildTree(afterorder, inorder);
    }
}

  

猜你喜欢

转载自www.cnblogs.com/LintonW/p/13182633.html