leetcode- 將有序數組轉換為二叉搜索樹(java)


將一個按照升序排列的有序數組,轉換為一棵高度平衡二叉搜索樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定有序數組: [-10,-3,0,5,9],

一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜索樹:

      0
     / \
   -3   9
   /   /
 -10  5


可以發現規律:
      0
     / \
   -3   9
每一個根結點都是三個結點的中值。 探索二叉樹我們選擇用中序遍歷。
根據條件:遞增數組,選取中值,我們可以采用二分法,nums[mid]就是中間結點,按照此方法同時可以解決平衡問題。
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return sortedArrayToBST(nums,0,nums.length-1);
        
    }
    public TreeNode sortedArrayToBST(int [] nums,int left,int right){
        if(left>right)return null;                                        //邊界條件,注意是left>right  
        int mid=(left+right)/2;
        TreeNode root=new TreeNode(nums[mid]);          
        root.left=sortedArrayToBST(nums,left,mid-1);        //遞歸向左探索,范圍變成left~mid-1;
        root.right=sortedArrayToBST(nums,mid+1,right);
        return root;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM