[JavaScript 刷题] 树 - 将有序数组转换为二叉搜索树, leetcode 108
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 树 - 将有序数组转换为二叉搜索树, leetcode 108相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 树 - 将有序数组转换为二叉搜索树, leetcode 108
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:108. Convert Sorted Array to Binary Search Tree
题目
如下:
Given an integer array
nums
where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.
解题思路
其实参考一下数组以及图:
[-10,-3,0,5,9]
就会发现几个规律:
- 数组的最左数值一定是二叉树的最左侧节点
- 数组的最右数值一定是二叉树的最大侧节点
- 数组的最中间数值一定是二叉树的根节点
这个解题方法就会利用第三个特性去实现:
-
每次过程中都找到最中间的结点,将其设置为 root
以该图为例,第一个 root 就是 0
-
将
[0, ..., mid)
的部分设置为 root 的左子树root 的左子树为
[-10, -3]
,这个部分递归地调用函数去解决也就是说,
[-10, -3]
这部分会带入sortedArrayToBST
函数中,进行下一步的操作,即找到中点(3),将其设为 root,左子树为-10
最后再调用
sortedArrayToBST
进行递归,此时只有一个值-10
这个时候再次调用
sortedArrayToBST
进行递归就会进入 base case:if (!nums.length) return null;
。递归结束,-10
的左右子树均为 null,这时候再返回上一个 call stack,将-10
作为-3
的左子树,如此往复 -
将
(mid, ..., nums.length)
部分设置为 root 的右子树root 的右子树为
[5, 9]
,这个部分递归地调用函数去解决其递归调用也是同样的道理
使用 JavaScript 解题
var sortedArrayToBST = function (nums)
if (!nums.length) return null;
const mid = Math.floor(nums.length / 2);
const root = new TreeNode(nums[mid]);
root.left = sortedArrayToBST(nums.slice(0, mid));
root.right = sortedArrayToBST(nums.slice(mid + 1, nums.length));
return root;
;
以上是关于[JavaScript 刷题] 树 - 将有序数组转换为二叉搜索树, leetcode 108的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode刷题(131)~将有序数组转换为二叉搜索树一看就会 一写就废
Leetcode刷题Python108. 将有序数组转换为二叉搜索树
LeetCode刷题108-简单-将有序数组转成平衡二叉搜索树(C语言)