美文网首页
中序和后序遍历建立二叉树

中序和后序遍历建立二叉树

作者: 编程小王子AAA | 来源:发表于2020-07-25 23:03 被阅读0次

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

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private TreeNode buildTree(int[] post,int postStart,int postEnd,int inStart,Map<Integer,Integer> inPos){
        if(postStart>postEnd) return null;
        TreeNode root=new TreeNode(post[postEnd]);
        int rootIdx=inPos.get(post[postEnd]);
        int leftLen=rootIdx-inStart;
        root.left=buildTree(post,postStart,postStart+leftLen-1,inStart,inPos);
        root.right=buildTree(post,postStart+leftLen,postEnd-1,rootIdx+1,inPos);
        return root;
    }
        
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        Map<Integer,Integer> inPos=new HashMap<>();
        for(int i=0;i<inorder.length;i++){
            inPos.put(inorder[i],i);
        }
        return buildTree(postorder,0,postorder.length-1,0,inPos); 
    }
}

相关文章

网友评论

      本文标题:中序和后序遍历建立二叉树

      本文链接:https://www.haomeiwen.com/subject/xndvlktx.html