mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
update 0108.将有序数组转换为二叉搜索树: 优化go 和 js 代码
This commit is contained in:
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
因为只要给我们一个有序数组,如果强调平衡,都可以以线性结构来构造二叉搜索树。
|
因为只要给我们一个有序数组,如果强调平衡,都可以以线性结构来构造二叉搜索树。
|
||||||
|
|
||||||
例如 有序数组[-10,-3,0,5,9] 可以就可以构造成这样的二叉搜索树,如图。
|
例如 有序数组[-10,-3,0,5,9] 就可以构造成这样的二叉搜索树,如图。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -147,7 +147,7 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
**注意:在调用traversal的时候为什么传入的left和right为什么是0和nums.size() - 1,因为定义的区间为左闭右闭**。
|
**注意:在调用traversal的时候传入的left和right为什么是0和nums.size() - 1,因为定义的区间为左闭右闭**。
|
||||||
|
|
||||||
|
|
||||||
## 迭代法
|
## 迭代法
|
||||||
@ -354,10 +354,15 @@ class Solution:
|
|||||||
|
|
||||||
```go
|
```go
|
||||||
func sortedArrayToBST(nums []int) *TreeNode {
|
func sortedArrayToBST(nums []int) *TreeNode {
|
||||||
if len(nums)==0{return nil}//终止条件,最后数组为空则可以返回
|
if len(nums) == 0 { //终止条件,最后数组为空则可以返回
|
||||||
root:=&TreeNode{nums[len(nums)/2],nil,nil}//按照BSL的特点,从中间构造节点
|
return nil
|
||||||
root.Left=sortedArrayToBST(nums[:len(nums)/2])//数组的左边为左子树
|
}
|
||||||
root.Right=sortedArrayToBST(nums[len(nums)/2+1:])//数字的右边为右子树
|
idx := len(nums)/2
|
||||||
|
root := &TreeNode{Val: nums[idx]}
|
||||||
|
|
||||||
|
root.Left = sortedArrayToBST(nums[:idx])
|
||||||
|
root.Right = sortedArrayToBST(nums[idx+1:])
|
||||||
|
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -384,33 +389,33 @@ var sortedArrayToBST = function (nums) {
|
|||||||
迭代
|
迭代
|
||||||
```JavaScript
|
```JavaScript
|
||||||
var sortedArrayToBST = function(nums) {
|
var sortedArrayToBST = function(nums) {
|
||||||
if(nums.length===0){
|
if(nums.length===0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let root=new TreeNode(0); //初始根节点
|
let root = new TreeNode(0); //初始根节点
|
||||||
let nodeQue=[root]; //放遍历的节点,并初始化
|
let nodeQue = [root]; //放遍历的节点,并初始化
|
||||||
let leftQue=[0]; //放左区间的下标,初始化
|
let leftQue = [0]; //放左区间的下标,初始化
|
||||||
let rightQue=[nums.length-1]; // 放右区间的下标
|
let rightQue = [nums.length-1]; // 放右区间的下标
|
||||||
|
|
||||||
while(nodeQue.length){
|
while(nodeQue.length) {
|
||||||
let curNode=nodeQue.pop();
|
let curNode = nodeQue.pop();
|
||||||
let left=leftQue.pop();
|
let left = leftQue.pop();
|
||||||
let right=rightQue.pop();
|
let right = rightQue.pop();
|
||||||
let mid=left+Math.floor((right-left)/2);
|
let mid = left + Math.floor((right-left)/2);
|
||||||
|
|
||||||
curNode.val=nums[mid]; //将下标为mid的元素给中间节点
|
curNode.val = nums[mid]; //将下标为mid的元素给中间节点
|
||||||
|
|
||||||
// 处理左区间
|
// 处理左区间
|
||||||
if(left<=mid-1){
|
if(left <= mid-1) {
|
||||||
curNode.left=new TreeNode(0);
|
curNode.left = new TreeNode(0);
|
||||||
nodeQue.push(curNode.left);
|
nodeQue.push(curNode.left);
|
||||||
leftQue.push(left);
|
leftQue.push(left);
|
||||||
rightQue.push(mid-1);
|
rightQue.push(mid-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理右区间
|
// 处理右区间
|
||||||
if(right>=mid+1){
|
if(right >= mid+1) {
|
||||||
curNode.right=new TreeNode(0);
|
curNode.right = new TreeNode(0);
|
||||||
nodeQue.push(curNode.right);
|
nodeQue.push(curNode.right);
|
||||||
leftQue.push(mid+1);
|
leftQue.push(mid+1);
|
||||||
rightQue.push(right);
|
rightQue.push(right);
|
||||||
|
Reference in New Issue
Block a user