Binary Search Tree III
樹主要有三種走訪的方式,分別是InOrder、PreOrder、PostOrder,主要差別在於走訪的順序
走訪的順序為: [1,3,4,5,8,9,12]
它會按照值的大小走訪,如果你想知道樹有什麼值,用InOrder可以一目了然
走訪的順序為: [5,3,1,4,9,8,12]
它是從上到下的走訪,根節點開始,左節點走到底,再走右節點
當你要複製一顆樹,用PreOrder很適合,只要你照它輸出的順序去insert,就可以產生一樣的樹
走訪的順序為: [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
--------
明天會講二元樹的刪除~