1. 程式人生 > >Leetcode108--將有序陣列轉換為二叉搜尋樹

Leetcode108--將有序陣列轉換為二叉搜尋樹

題目描述:

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

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

示例:

給定有序陣列: [-10,-3,0,5,9],

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

      0
     / \
   -3   9
   /   /
 -10  5

解決本題的思路可以考慮使用遞迴,遞迴的建立樹。

builldTree為遞迴函式。原理也就是在陣列種中點的樹一定在根節點上。code如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private TreeNode buildTree(int[] nums,int begin ,int end){
        if(begin > end)
            return null;
        int midNum = begin + (end - begin) / 2;
        TreeNode R= new TreeNode (nums[midNum]);
        R.left = buildTree(nums,begin,midNum - 1);
        R.right = buildTree(nums,midNum + 1,end);
        return R;
    }
    
    
    public TreeNode sortedArrayToBST(int[] nums) {
        int begin = 0 ;
        int end = nums.length - 1;

        return buildTree(nums,begin,end);
    }
}