package main
import "fmt"
type Node struct {
Key int
Left * Node
Right * Node
}
func (n *Node) Insert(key int) {
if key < n.Key{
if n.Left == nil{
n.Left = &Node{Key:key}
}
n.Left.Insert(key)
}else if key > n.Key{
if n.Right == nil{
n.Right = &Node{Key:key}
}
n.Right.Insert(key)
}
}
//中序打印
func (n * Node)print() {
if n == nil{
return
}
n.Left.print()
fmt.Println(n.Key)
n.Right.print()
}
//前序打印
func (n * Node)printpre() {
if n == nil{
return
}
fmt.Println(n.Key)
n.Left.printpre()
n.Right.printpre()
}
//后序打印
func (n * Node)printend() {
if n == nil{
return
}
n.Left.printend()
n.Right.printend()
fmt.Println(n.Key)
}
//查询
func (n * Node)Search(key int) bool {
if n == nil{
return false
}
if n.Key < key{
n.Right.Search(key)
}else if n.Key > key{
return n.Left.Search(key)
}
return true
}
//删除
func (n * Node)Delete(key int) *Node {
if n == nil{
return nil
}
if n.Key < key{
n.Right = n.Right.Delete(key)
}else if n.Key > key{
n.Left = n.Left.Delete(key)
}else {
if n.Left == nil{
return n.Right
}else if n.Right == nil{
return n.Left
}else {
min := n.Right.Min()
n.Key = min
n.Right = n.Right.Delete(min)
}
}
return n
}
//求最小值
func (n *Node)Min() int {
if n.Left==nil{
return n.Key
}
return n.Left.Min()
}
func main() {
root := &Node{Key:8}
root.Insert(3)
root.Insert(10)
root.Insert(1)
root.Insert(6)
root.Insert(14)
root.Insert(4)
root.Insert(7)
root.Insert(13)
fmt.Println("=====================中序打印==================================")
root.print()
fmt.Println("======================前序打印================================")
root.printpre()
fmt.Println("=======================后序打印================================")
root.printend()
if root.Search(10){
fmt.Println("found")
}else {
fmt.Println("not found")
}
if root.Search(100){
fmt.Println("found")
}else {
fmt.Println("not found")
}
if root.Search(0){
fmt.Println("found")
}else {
fmt.Println("not found")
}
root.Delete(6)
root.Delete(3)
root.print()
}
二叉树操作
原创
©著作权归作者所有:来自51CTO博客作者类似简单的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
【二叉树】合并二叉树
题目给定两个二叉树想象当你将它们中的一个 覆盖 到另一个上时两个二叉树的一些节点便
swift 深度优先 算法 ios objective-c -
翻转二叉树【二叉树】
时间复杂度:空间复杂度:
python 复杂度 Code 空间复杂度 -
【二叉树】输出二叉树
题目在一个 m*n 的二维字符串数组中输出二叉树行数 m 应当等于给定二叉树的 高度列数 n 应当总是 奇数根节点 的值(以字符串格式
swift 算法 深度优先 二叉树 子树 -
二叉树操作复习树 数据结构 子节点 子树 i++
-
二叉树(三)——线索二叉树
利用二叉链表中空的指针域指出结点在某种遍历序列中的直接前驱或直接后继,指向前驱和后继的
线索二叉树 二叉树 数据结构和算法 中序序列 结点 -
【二叉树】二叉树着色游戏
题目有两位极客玩家参与了一场「二叉树着色」的游戏游戏中,给出二叉树的根节点 root,
算法 二叉树 swift 子树 子节点 -
【二叉树】二叉树最大宽度
题目给定一个二叉树编写一个函数来获取这个树的 最大宽度树的宽度是 所空
swift 算法 二叉树 满二叉树 五笔