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实现代码,它的实现原理是:首先,使用中序遍历二叉树,将其节点值存入一个数组中;其次,对数组进行排序;最后,再次中序遍历二叉树,将排序后的数组中的值依次赋值给二叉树节点。
猜您想看
-
单片机实现远程智能自动浇花系统
一、介绍远程智...
2023年05月25日 -
Redash+kettle的解决方案是什么
Redash和...
2023年05月26日 -
如何正确地进行瞄准
准备工作1、准...
2023年05月15日 -
如何在EXSI中创建虚拟机的VTPM
如何在ESXi...
2023年04月17日 -
hadoop日志级别的调制方法是什么
一、Hadoo...
2023年05月23日 -
如何使用EXSI设置虚拟机的NAT转换
使用EXSI设...
2023年04月17日