Skip to content

Level Order Traversal

Implementation

package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func main() {
    root := &TreeNode{
        Val: 10,
        Left: &TreeNode{
            Val: 20,
            Left: &TreeNode{
                Val: 40,
            },
            Right: &TreeNode{
                Val: 50,
                Left: &TreeNode{
                    Val: 70,
                },
                Right: &TreeNode{
                    Val: 80,
                },
            },
        },
        Right: &TreeNode{
            Val: 30,
            Right: &TreeNode{
                Val: 60,
            },
        },
    }

    levelOrderTraversal(root)
}

func levelOrderTraversal(root *TreeNode) {
    queue := []*TreeNode{}
    queue = append(queue, root)
    for len(queue) > 0 {
        ele := queue[0]
        fmt.Println(ele.Val)
        if ele.Left != nil {
            queue = append(queue, ele.Left)
        }
        if ele.Right != nil {
            queue = append(queue, ele.Right)
        }
        queue = queue[1:]
    }
}

Level Order Traversal Line by Line

Implementation

package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}


func main() {
    root := &TreeNode{
        Val: 10,
        Left: &TreeNode{
            Val: 20,
            Left: &TreeNode{
                Val: 40,
            },
            Right: &TreeNode{
                Val: 50,
                Left: &TreeNode{
                    Val: 70,
                },
                Right: &TreeNode{
                    Val: 80,
                },
            },
        },
        Right: &TreeNode{
            Val: 30,
            Right: &TreeNode{
                Val: 60,
            },
        },
    }

    levelOrderTraversalLineByLine(root)
}

func levelOrderTraversalLineByLine(root *TreeNode) {
    queue := []*TreeNode{}
    queue = append(queue, root)
    queue = append(queue, nil)

    for len(queue) > 1 {
        ele := queue[0]
        queue = queue[1:]
        if ele == nil {
            fmt.Println()
            queue = append(queue, nil)
            continue
        }
        fmt.Printf("%v ", ele.Val)
        if ele.Left != nil {
            queue = append(queue, ele.Left)
        }
        if ele.Right != nil {
            queue = append(queue, ele.Right)
        }

    }
}