层序遍历二叉树
队列一大用处就是实现二叉树的层序遍历,将存在的左右子节点均加入队列,然后继续队头遍历。
golang实现
type Node struct {Left *NodeRight *NodeData interface{}}func main() {// 构造二叉树n1 := Node{Data: "1"}n2 := Node{Data: "2"}n3 := Node{Data: "3"}n4 := Node{Data: "4"}n5 := Node{Data: "5"}n7 := Node{Data: "7"}n1.Left = &n2n1.Right = &n3n2.Left = &n4n2.Right = &n5n3.Right = &n7// 遍历二叉树, 定义切片表示队列,加入根节点queue := []*Node{&n1}// 最终结果var result []*Node// 循环处理for true {// 将左子节点加入队列if queue[0].Left != nil {queue = append(queue, queue[0].Left)}// 将右子节点加入队列if queue[0].Right != nil {queue = append(queue, queue[0].Right)}// 当前节点加入结果result = append(result, queue[0])// 队列中是否还有剩余节点if len(queue) > 1 {// 截取剩余节点queue = queue[1:]} else {// 队列中没有剩余节点了break}}// 遍历结果for _, ele := range result {fmt.Print(ele.Data, " ")}}
结果和图示一致
1 2 3 4 5 7
