【劍指offer】07 重建二叉樹

面試題07. 重建二叉樹

難度中等72

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

 

例如,給出

前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7

 

限制:

0 <= 節點個數 <= 5000

 HashMap<Integer,Integer> map = new HashMap<>();
    int [] pre;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        pre = preorder;
        for(int i = 0;i<inorder.length;i++){
            map.put(inorder[i],i);
        }
        return recur(0,0,inorder.length-1);
    }
    public  TreeNode recur(int pre_root,int in_left,int in_right){
        if(in_left>in_right)
            return null;
        TreeNode root = new TreeNode(pre[pre_root]);
        int i = map.get(pre[pre_root]);
        root.left = recur(pre_root+1,in_left,i-1);
        root.right = recur(pre_root+i-in_left+1,i+1,in_right);
        return root;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章