二叉樹是面試經常考的
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 協議》,轉載必須註明作者和本文連結