来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-height-tree-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

解答

有序数组转二叉搜索树:

  1. 二分查找找中间节点
  2. 中间节点以左为左子节点树
  3. 中间节点以右为右子节点树

    1. /**
    2. * Definition for a binary tree node.
    3. * function TreeNode(val) {
    4. * this.val = val;
    5. * this.left = this.right = null;
    6. * }
    7. */
    8. /**
    9. * @param {number[]} nums
    10. * @return {TreeNode}
    11. */
    12. var sortedArrayToBST = function(nums) {
    13. function traverse (arr) {
    14. if (arr?.length) {
    15. if (arr?.length === 1) {
    16. return new TreeNode(arr[0]);
    17. }
    18. let mid = arr.length >> 1;
    19. let val = arr[mid];
    20. let node = new TreeNode(val);
    21. let leftArr = arr.slice(0, mid);
    22. let rightArr = arr.slice(mid + 1);
    23. if (leftArr?.length) {
    24. node.left = traverse(leftArr);
    25. }
    26. if (leftArr?.length) {
    27. node.right = traverse(rightArr);
    28. }
    29. return node;
    30. } else {
    31. return null;
    32. }
    33. }
    34. return traverse(nums);
    35. };