Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:
Given the sorted array: [-10,-3,0,5,9], One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 0 / \ -3 9 / /
-10 5
package leetCode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; /** * Created by lxw, liwei4939@126.com on 2018/3/21. */ public class L108_ConvertSortedArrayToBinarySearchTree { public TreeNode sortedArrayToBST(int[] nums) { if (nums == null){ return null; } return generate(nums, 0, nums.length-1); } public TreeNode generate(int[] nums, int start, int end){ if (start > end){ return null; } int mid = (end + start) / 2; TreeNode head = new TreeNode(nums[mid]); head.left = generate(nums, start, mid-1); head.right = generate(nums, mid+1, end); return head; } public static void main(String[] args){ L108_ConvertSortedArrayToBinarySearchTree tmp = new L108_ConvertSortedArrayToBinarySearchTree(); int[] nums = new int[]{-10, -3, 0, 5, 9}; TreeNode head = tmp.sortedArrayToBST(nums); Queue<TreeNode> queue = new LinkedList<>(); List<Integer> res = new ArrayList<>(); queue.offer(head); while (!queue.isEmpty()){ head = queue.poll(); res.add(head.val); if (head.left != null){ queue.offer(head.left); } if (head.right != null){ queue.offer(head.right); } } System.out.println(res); } }