LeetCode 108. 将有序数组转换为二叉搜索树 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) {
        return helper(nums,0,nums.length-1);
    }
    public TreeNode helper(int []nums, int left, int right){
        if(left > right){
            return null;
        }
        //选择中间左边的作为根节点
        int mid = (left + right) / 2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = helper(nums,left,mid-1);
        root.right = helper(nums,mid+1,right);

        return root;
    }
}

原文地址:https://www.cnblogs.com/yu-jiawei/p/13231565.html