数据结构和算法-Go实现二叉搜索树

二叉树是面试经常考的

package main

import "fmt"

type Node struct{
    Value int
    leftNode *Node
    rightNode *Node
}
type BinaryTree struct{
    len int
    root *Node
}
func NewNode(data int) *Node{
    return &Node{data,nil,nil}
}
func (node *Node)Insert(data int){
    if node.Value > data {
        if node.leftNode != nil{
            node.leftNode.Insert(data)
        }else{
            node.leftNode = NewNode(data)
        }
    }else{
        if node.rightNode != nil{
            node.rightNode.Insert(data)
        }else{
            node.rightNode = NewNode(data)
        }
    }
}
func (node *Node)middleShow(){
    if node.leftNode != nil{
        node.leftNode.middleShow()
    }
    fmt.Println(node.Value)
    if node.rightNode != nil{
        node.rightNode.middleShow()
    }
}
func (node *Node)search(data int) *Node{
    if node.Value == data {
        return node
    }else if node.Value > data {
        if node.leftNode != nil {
            return node.leftNode.search(data)
        }
    }else{
        if node.rightNode != nil{
            return node.rightNode.search(data)
        }
    }
    return nil
}
//----------------------------------------------------
func NewTree() *BinaryTree{
    return &BinaryTree{0,nil}
}
//插入一个数据
func (tree *BinaryTree)Insert(data int){
    tree.len++
    if tree.root != nil{
        tree.root.Insert(data)
    }else{
        tree.root = NewNode(data)
    }
}
//查找值相等的节点
func (tree *BinaryTree)Search(data int) *Node{
    if tree.root != nil {
        return tree.root.search(data)
    }else{
        return nil
    }
}

//前序遍历 根节点->左子树->右子树
//中序遍历 左子树->根节点->右子树
func (tree *BinaryTree)MiddleShow(){
    if tree.root == nil{
        return
    }
    tree.root.middleShow()
}

func main(){
    tree := NewTree()
    tree.Insert(4)
    tree.Insert(6)
    tree.Insert(1)
    tree.Insert(9)
    tree.Insert(2)
    target := tree.Search(60)
    fmt.Println(target)
    tree.MiddleShow()
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!