Day.25 Binary Search Tree III

Binary Search Tree III

树主要有三种走访的方式,分别是InOrder、PreOrder、PostOrder,主要差别在於走访的顺序

https://ithelp.ithome.com.tw/upload/images/20211003/20129767fVCGUdqFop.png

InOrder

走访的顺序为: [1,3,4,5,8,9,12]
它会按照值的大小走访,如果你想知道树有什麽值,用InOrder可以一目了然

PreOrder

走访的顺序为: [5,3,1,4,9,8,12]
它是从上到下的走访,根节点开始,左节点走到底,再走右节点
当你要复制一颗树,用PreOrder很适合,只要你照它输出的顺序去insert,就可以产生一样的树

PostOrder

走访的顺序为: [1,4,3,8,12,9,5]
它是从下到上的走访,从左边最底下的节点开始上去,再到右边,最後才回到根节点

三种走访的实作方式基本上是一样~

程序:

func (t *BinarySearchTree) InOrder() {
	t.inOrderDFS(t.root)
}

func (t *BinarySearchTree) inOrderDFS(node *Node) {
	if node == nil {
		return
	}

	t.inOrderDFS(node.Left)
	fmt.Println(node.Val)
	t.inOrderDFS(node.Right)
}

func (t *BinarySearchTree) PreOrder() {
	t.preOrderDFS(t.root)
}

func (t *BinarySearchTree) preOrderDFS(node *Node) {
	if node == nil {
		return
	}

	fmt.Println(node.Val)
	t.preOrderDFS(node.Left)
	t.preOrderDFS(node.Right)
}

func (t *BinarySearchTree) PostOrder() {
	t.postOrderDFS(t.root)
}

func (t *BinarySearchTree) postOrderDFS(node *Node) {
	if node == nil {
		return
	}

	t.postOrderDFS(node.Left)
	t.postOrderDFS(node.Right)
	fmt.Println(node.Val)
}
func main() {
	tree := &BinarySearchTree{}
	tree.Insert(5)
	tree.Insert(3)
	tree.Insert(1)
	tree.Insert(4)
	tree.Insert(9)
	tree.Insert(8)
	tree.Insert(12)

	fmt.Println("InOrder:")
	tree.InOrder()
	fmt.Println("--------")

	fmt.Println("PreOrder:")
	tree.PreOrder()
	fmt.Println("--------")

	fmt.Println("PostOrder:")
	tree.PostOrder()
	fmt.Println("--------")
}

output:

InOrder:
1
3
4
5
8
9
12
--------
PreOrder:
5
3
1
4
9
8
12
--------
PostOrder:
1
4
3
8
12
9
5
--------

明天会讲二元树的删除~


<<:  Day 18. slate × Immutable × Immer & slate

>>:  [Day 19] 现在才讲全域注册、区域注册

用 Python 畅玩 Line bot - 30:Line Notify(三)

在上篇中,我们是需要到 Line Notify 登入後的个人介面发行 token,但总不能叫每一个加...

JS [笔记] Javascript 优良部分、糟糕与不良的部分

优良部份1~5 1. 宽松型别(loose typing)及 易转型 https://codepen...

[Day6]Back to High School Physics

上一篇介绍了Count on Cantor,按照题目给的排列讯续找出数字的位子,是一题了解题目的规律...

[Day 9] .Net Task 底层(2)

前言 我们昨天聊到要透过解析 threadPool 档案中的 FinishContinuations...

# Day15--今天,我想来点.......扩展

扩展的主要功能: 扩展(extension)是 Swift 一个重要的特性,它可以为已存在的列举、结...