// 先序遍历
func RecursionPreorderTraversal(node *BinaryTree) {
if node == nil {
return
}
fmt.Printf("%v ", node.Value)
RecursionPreorderTraversal(node.LeftNode)
RecursionPreorderTraversal(node.RightNode)
}
// 中序遍历
func RecursionMiddleorderTraversal(node *BinaryTree) {
if node == nil {
return
}
RecursionMiddleorderTraversal(node.LeftNode)
fmt.Printf("%v ", node.Value)
RecursionMiddleorderTraversal(node.RightNode)
}
// 后序遍历
func RecursionPostorderTraversal(node *BinaryTree) {
if node == nil {
return
}
RecursionPostorderTraversal(node.LeftNode)
RecursionPostorderTraversal(node.RightNode)
fmt.Printf("%v ", node.Value)
}
// 层级遍历
func LevelTraversal(rootNode *BinaryTree) {
if rootNode == nil {
return
}
var nodeSlice []*BinaryTree
nodeSlice = append(nodeSlice, rootNode)
RecursionTraversal(nodeSlice)
}
func RecursionTraversal(nodeSlice []*BinaryTree) {
if len(nodeSlice) == 0 {
return
}
// 创建新的节点slice,存储下一层需要遍历的node
var nextSlice []*BinaryTree
//遍历当前nodeSlice
for i := 0; i < len(nodeSlice); i++ {
//取出要遍历的node
node := nodeSlice[i]
//输出当前node的值
fmt.Printf("%v ", node.Value)
//当前node左子节点append到下一层node slice中
if node.LeftNode != nil {
nextSlice = append(nextSlice, node.LeftNode)
}
//当前node右子节点append到下一层node slice中
if node.RightNode != nil {
nextSlice = append(nextSlice, node.RightNode)
}
}
//递归遍历下一层的node slice
RecursionTraversal(nextSlice)
}