面试题 04.02. 最小高度树

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public TreeNode sortedArrayToBST(int[] nums) {
  12. // 因为数组元素是有序的, 因此每次选择中间的元素作为根节点, 构造二叉树
  13. if (nums == null || nums.length == 0)
  14. return null;
  15. return dfs(nums, 0, nums.length - 1);
  16. }
  17. private TreeNode dfs(int[] nums, int left, int right) {
  18. if (left > right)
  19. return null;
  20. int mid = (left + right) / 2;
  21. TreeNode root = new TreeNode(nums[mid]);
  22. root.left = dfs(nums, left, mid - 1);
  23. root.right = dfs(nums, mid + 1, right);
  24. return root;
  25. }
  26. }