今天來實作二元樹~
首先來定義一下資料結構
type Node struct {
Left *Node
Right *Node
Val int
}
type BinarySearchTree struct {
root *Node
}
我們需要來insert新的節點,還記得比較小的要放在左邊,比較大的放在右邊嗎?
insert的時候就是要一個一個node做判斷,去找到適合放的位置,如果插入值比目前node的值小,就看它左邊的節點是不是空的,如果是就可以放,否則再往左邊的node繼續找。
如上圖,假設我們現在要insert一個5的值,那走訪的順序為: 10->3->4 放在右邊節點
新增:
func (t *BinarySearchTree) Insert(val int) {
newNode := &Node{
Val: val,
}
if t.root == nil {
t.root = newNode
return
}
node := t.root
for {
if val == node.Val {
return
}
if val < node.Val {
// 左邊剛好是空的
if node.Left == nil {
node.Left = newNode
return
}
// 繼續往左找
node = node.Left
} else {
// 右邊剛好是空的
if node.Right == nil {
node.Right = newNode
return
}
// 繼續往右找
node = node.Right
}
}
}
搜尋:
func (t *BinarySearchTree) Find(val int) bool {
node := t.root
for {
if node == nil {
return false
}
if node.Val == val {
return true
}
if val < node.Val {
node = node.Left
} else {
node = node.Right
}
}
}
今天先到這邊,明天再繼續會講樹~