golang中怎么利用leetcode 恢复二叉搜索树
一、什么是二叉搜索树
二叉搜索树(Binary Search Tree),又称二叉查找树、有序二叉树,是指一棵空树或者具有下列性质的二叉树:
1、若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2、若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3、任意节点的左、右子树也分别为二叉查找树;
4、没有键值相等的节点。
二、leetcode恢复二叉搜索树的原理
leetcode恢复二叉搜索树的原理是:首先,中序遍历二叉树,将其节点值存入一个数组中;其次,对数组进行排序;最后,再次中序遍历二叉树,将排序后的数组中的值依次赋值给二叉树节点。
三、leetcode恢复二叉搜索树的代码实现
下面是leetcode恢复二叉搜索树的golang实现代码:
package main
import (
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func recoverTree(root *TreeNode) {
var prev *TreeNode
var first, second *TreeNode
inOrder(root, &prev, &first, &second)
first.Val, second.Val = second.Val, first.Val
}
func inOrder(root *TreeNode, prev, first, second **TreeNode) {
if root == nil {
return
}
inOrder(root.Left, prev, first, second)
if *prev != nil && (*prev).Val > root.Val {
if *first == nil {
*first = *prev
}
*second = root
}
*prev = root
inOrder(root.Right, prev, first, second)
}
func main() {
root := &TreeNode{Val: 1}
root.Left = &TreeNode{Val: 3}
root.Left.Right = &TreeNode{Val: 2}
recoverTree(root)
fmt.Println(root.Val, root.Left.Val, root.Left.Right.Val)
}
上面的代码是leetcode恢复二叉搜索树的golang实现代码,它的实现原理是:首先,使用中序遍历二叉树,将其节点值存入一个数组中;其次,对数组进行排序;最后,再次中序遍历二叉树,将排序后的数组中的值依次赋值给二叉树节点。
猜您想看
-
如何制作Cubie版OpenWRT
Cubie版O...
2023年07月20日 -
C++中避免使用do语句的原因是什么
1、不易阅读C...
2023年05月25日 -
springboot基于java文件怎么配置SqlSessionFactoryBean
配置SqlSe...
2023年07月23日 -
如何更快地瞄准敌人
一、准备工作更...
2023年05月15日 -
如何将Windows设置为卡片式窗口布局
1. 启用卡片...
2023年05月15日 -
如何使用iPhone上的屏幕录制功能录制视频
如何使用iPh...
2023年05月05日