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;
}
}