Merge pull request #1491 from jujunwang/master

添加(1382. 将二叉搜索树变平衡    0031.下一个排列)的go版本
This commit is contained in:
程序员Carl
2022-07-16 11:45:03 +08:00
committed by GitHub
2 changed files with 62 additions and 2 deletions

View File

@ -190,6 +190,26 @@ class Solution(object):
## Go
```go
//卡尔的解法
func nextPermutation(nums []int) {
for i:=len(nums)-1;i>=0;i--{
for j:=len(nums)-1;j>i;j--{
if nums[j]>nums[i]{
//交换
nums[j],nums[i]=nums[i],nums[j]
reverse(nums,0+i+1,len(nums)-1)
return
}
}
}
reverse(nums,0,len(nums)-1)
}
//对目标切片指定区间的反转方法
func reverse(a []int,begin,end int){
for i,j:=begin,end;i<j;i,j=i+1,j-1{
a[i],a[j]=a[j],a[i]
}
}
```
## JavaScript

View File

@ -123,6 +123,46 @@ class Solution:
```
Go
```go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func balanceBST(root *TreeNode) *TreeNode {
// 二叉搜索树中序遍历得到有序数组
nums := []int{}
// 中序递归遍历二叉树
var travel func(node *TreeNode)
travel = func(node *TreeNode) {
if node == nil {
return
}
travel(node.Left)
nums = append(nums, node.Val)
travel(node.Right)
}
// 二分法保证左右子树高度差不超过一(题目要求返回的仍是二叉搜索树)
var buildTree func(nums []int, left, right int) *TreeNode
buildTree = func(nums []int, left, right int) *TreeNode {
if left > right {
return nil
}
mid := left + (right-left) >> 1
root := &TreeNode{Val: nums[mid]}
root.Left = buildTree(nums, left, mid-1)
root.Right = buildTree(nums, mid+1, right)
return root
}
travel(root)
return buildTree(nums, 0, len(nums)-1)
}
```
JavaScript
```javascript
var balanceBST = function(root) {