LeetCode:將有序數組轉換為二叉搜索樹【108】


LeetCode:將有序數組轉換為二叉搜索樹【108】

題目描述

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

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

示例:

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

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

      0
     / \
   -3   9
   /   /
 -10  5

題目分析

  BST樹的建立是唯一的嗎?即使給定有序數組,我認為BST也是是不唯一的

  二叉樹的建立過程就是不斷取中間值,然后將數組再一拆為二,然后左邊部分找左子節點,右邊部分找右子節點,循此往復就可建立完成

Java題解

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

  


免責聲明!

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



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