1. 程式人生 > >LeetCode 將有序數組轉換為二叉搜索樹

LeetCode 將有序數組轉換為二叉搜索樹

ret 答案 兩個 lee efi 示例 不同 二叉 d+

題目:

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

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

示例:

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

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

      0
     /    -3   9
   /   /
 -10  5

思路:采用二分法來創建平衡二叉樹,根結點剛好為數組中間的節點,根節點的左子樹的根是數組左邊部分的中間節點,根節點的右子樹是數據右邊部分的中間節點;代碼執行結果和示例給出結果不同,但滿足平衡二叉樹。

代碼:

/**
 * 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) {
        if(nums == null || nums.length == 0)
            return null;
        return getTree(nums,0,nums.length - 1);
    }
    
    public TreeNode getTree(int []nums,int l,int r){
        if(l <= r){
            int mid = (l+r)/2;
            TreeNode node = new TreeNode(nums[mid]);
            node.left = getTree(nums,l,mid-1);
            node.right = getTree(nums,mid+1,r);
            return node;
        }else{
            return null;
        }
    } 
}

LeetCode 將有序數組轉換為二叉搜索樹