將有序陣列轉換為二叉搜尋樹Java實現
阿新 • • 發佈:2020-12-08
題目
將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:
給定有序陣列: [-10,-3,0,5,9],
一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
0
/ \
-3 9
/ /
-10 5
解題思路
- 對於該題來講,要先知道二叉搜尋樹的定義,簡單來講就是比根節點小的放左邊,比根節點大的放右邊,並且要平衡,左右高度差不超過一,那麼一個有序的陣列的中間那個節點做根節點才能保證不超過1.
- 那麼遞迴的思想就出來了,吧陣列中間的那個節點為根節點返回,他的左邊元素是他的左子樹,右邊是右子樹。所以遞迴去呼叫函式。
- ps:如果下面程式碼看完後,建議可以去搜Arrays工具類的copyOfRange()方法看看。
程式碼
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums ==null || nums.length==0){
return null;
}
if(nums.length==1){
return new TreeNode(nums[0]);
}
int mid = nums. length/2;
TreeNode tree = new TreeNode(nums[mid]);
int[] nums1 = new int[mid];
int[] nums2 = new int[nums.length-1-mid];
for(int i=0; i<mid;i++){
nums1[i]=nums[i];
}
for(int i=mid+1; i<nums.length;i++){
nums2[i-mid-1]=nums[i] ;
}
tree.left= mid==0?null:sortedArrayToBST(nums1);
tree.right= mid==nums.length?null:sortedArrayToBST(nums2);
return tree;
}
}