iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

今天來實作二元樹~

https://ithelp.ithome.com.tw/upload/images/20211002/201297670wPwf7qijF.png

首先來定義一下資料結構

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
		}
	}
}

今天先到這邊,明天再繼續會講樹~


上一篇
Day.23 Binary Search Tree
下一篇
Day.25 Binary Search Tree III
系列文
算法30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言