劍指 Offer 07. 重建二叉樹 - 力扣(LeetCode)
阿新 • • 發佈:2021-02-01
技術標籤:劍指offerleetcode演算法hashmap
解法一:
時間空間複雜度雙高
應該是因為使用了Arrays.copyOfRange()函式導致的
新思路 不傳入陣列 改為傳入陣列下標 ===>解法二
public static TreeNode buildTree(int[] preorder, int[] inorder) {
//如果陣列中沒有節點 直接返回null
if (preorder.length==0) return null;
TreeNode treeNode = new TreeNode(preorder[0]) ;
//如果陣列中只有一個節點 直接返回
if (preorder.length==1) return treeNode;
int i = 0;
while (inorder[i] != treeNode.val){
i++;
}
//左子樹
if (i > 0){
treeNode.left = buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
}
//右子樹
if ((preorder. length > i+1)&&(inorder.length > i+1))
treeNode.right = buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
return treeNode;
}