1. 程式人生 > 實用技巧 >劍指offer根據前中序遍歷重建二叉樹

劍指offer根據前中序遍歷重建二叉樹

  • 前中後序的遍歷是指對一個二叉樹而言,最終的遍歷結果的根節點是在哪裡的順序,即
    * 前序遍歷:根節點、左子樹、右子樹
    * 中序遍歷:左子樹、根節點、右子樹
    * 後序遍歷:左子樹、右子樹、根節點
  • 重建的思路:根據根節點位置找到根節點,例如前序的首位或者後續的末尾,然後在中序遍歷中找到根節點的位置,藉此劃分出左右子樹的子陣列,然後進行遞迴重建
public TreeNode buildTree(int[] preorder, int[] inorder) {
    if(preorder.length==0)return null;
    if(preorder.length==1&&inorder.length==1){
        return new TreeNode(preorder[0]);
    }
    TreeNode root = new TreeNode(preorder[0]);
    int i;
    for(i = 0 ;i<inorder.length;i++){
        if(inorder[i]==preorder[0])break;
    }
    root.left = buildTree(Arrays.copyOfRange(preorder,1,1+i),Arrays.copyOfRange(inorder,0,i));
    root.right = buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
    return root;
}