将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
1 public class ConvertSortedArrayToBinarySerachTree108 { 2 static class TreeNode { 3 int val; 4 TreeNode left; 5 TreeNode right; 6 TreeNode(int x) { 7 this.val = x; 8 } 9 } 10 11 public TreeNode sortedArrayToBST(int[] nums) { 12 return toBST(nums, 0, nums.length - 1); 13 } 14 15 public TreeNode toBST(int[] nums, int start, int end) { 16 if(start > end) { //相等的时候需要返回这一个节点,所以不能返回null 17 return null; 18 } 19 //或这当start == end时,直接返回节点 20 /* if(start == end) { 21 return new TreeNode(nums[start]); 22 }*/ 23 int mid = (start + end) / 2; 24 TreeNode root = new TreeNode(nums[mid]); 25 root.left = toBST(nums, start, mid - 1); 26 root.right = toBST(nums, mid + 1, end); 27 return root; 28 } 29 }
原文:https://www.cnblogs.com/xiyangchen/p/11144704.html