106. 从中序与后序遍历序列构造二叉树

package leetcode;

import java.util.HashMap;

public class demo_106 {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
        //存储每个节点在中序遍历中的位置
        for(int i=0;i<inorder.length;i++) {
            map.put(inorder[i], i);
        }
        return myBuildTree(inorder, postorder, map, 0, inorder.length-1, 0, postorder.length-1);
    }
    public TreeNode myBuildTree(int[] inorder, int[] postorder,HashMap<Integer, Integer> map,int inleft,int inright,int postleft,int postright) {
        if(inright<inleft) {
            return null;
        }
        
        int val=postorder[postright];
        //找到根节点的位置
        int location=map.get(val);
        //左子树的个数
        int leftTreeSize=location-inleft;
        //创建一个新的节点
        TreeNode root=new TreeNode(val);
        //创建左子树
        root.left=myBuildTree(inorder, postorder, map, inleft, location-1, postleft, postleft+leftTreeSize-1);
        //创建右子树
        root.right=myBuildTree(inorder, postorder, map, location+1, inright, postleft+leftTreeSize, postright-1);
        return root;
    }
}

 

posted on 2022-05-17 10:16  一仟零一夜丶  阅读(17)  评论(0)    收藏  举报