package main
import "fmt"
// 定义二叉树结构
type Tree struct {
root *TreeNode
}
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
// 按数组顺序插入节点
func (tree *Tree) BFSInsert(v int) {
if tree.root == nil {
tree.root = &TreeNode{Val: v}
return
}
q := make([]*TreeNode, 0)
q = append(q, tree.root)
for len(q) > 0 {
curNode := q[0] // 非递归分层遍历
q = q[1:] // pop
if curNode.Left != nil { // 左子节点
q = append(q, curNode.Left)
} else {
curNode.Left = &TreeNode{Val: v} // 找到合适的插入地点
return
}
if curNode.Right != nil {
q = append(q, curNode.Right)
} else {
curNode.Right = &TreeNode{Val: v}
return
}
}
}
// 按层遍历
func (tree *Tree) BFSTraverse(node *TreeNode) {
if node == nil {
return
}
q := []*TreeNode{tree.root}
for len(q) > 0 {
cur := q[0]
q = q[1:]
fmt.Printf("%v ", cur.Val)
if cur.Left != nil {
q = append(q, cur.Left)
}
if cur.Right != nil {
q = append(q, cur.Right)
}
}
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng