0
0
DSA Goprogramming~20 mins

Zigzag Level Order Traversal in DSA Go - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Zigzag Traversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Zigzag Level Order Traversal on a Binary Tree
What is the output of the zigzag level order traversal for the given binary tree?
DSA Go
package main

import "fmt"

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

func zigzagLevelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }
    var result [][]int
    var currentLevel []*TreeNode
    currentLevel = append(currentLevel, root)
    leftToRight := true

    for len(currentLevel) > 0 {
        var levelVals []int
        var nextLevel []*TreeNode

        for _, node := range currentLevel {
            levelVals = append(levelVals, node.Val)
        }

        if !leftToRight {
            for i, j := 0, len(levelVals)-1; i < j; i, j = i+1, j-1 {
                levelVals[i], levelVals[j] = levelVals[j], levelVals[i]
            }
        }

        for _, node := range currentLevel {
            if node.Left != nil {
                nextLevel = append(nextLevel, node.Left)
            }
            if node.Right != nil {
                nextLevel = append(nextLevel, node.Right)
            }
        }

        result = append(result, levelVals)
        currentLevel = nextLevel
        leftToRight = !leftToRight
    }

    return result
}

func main() {
    root := &TreeNode{Val: 1}
    root.Left = &TreeNode{Val: 2}
    root.Right = &TreeNode{Val: 3}
    root.Left.Left = &TreeNode{Val: 4}
    root.Left.Right = &TreeNode{Val: 5}
    root.Right.Right = &TreeNode{Val: 6}

    result := zigzagLevelOrder(root)
    fmt.Println(result)
}
A[[1], [2, 3], [4, 5, 6]]
B[[1], [3, 2], [4, 5, 6]]
C[[1], [2, 3], [6, 5, 4]]
D[[1], [3, 2], [6, 5, 4]]
Attempts:
2 left
💡 Hint
Remember that zigzag means alternating the order of nodes at each level.
🧠 Conceptual
intermediate
1:30remaining
Understanding Zigzag Level Order Traversal Direction
In zigzag level order traversal, what determines the order of nodes at each level?
AThe level number: even levels left to right, odd levels right to left
BThe number of children a node has
CThe value of the node: even values left to right, odd values right to left
DThe height of the tree
Attempts:
2 left
💡 Hint
Think about how the traversal direction changes as you go down levels.
🔧 Debug
advanced
2:30remaining
Identify the Bug in Zigzag Traversal Code
What error will this code produce when run, and why? func zigzagLevelOrder(root *TreeNode) [][]int { if root == nil { return [][]int{} } var result [][]int var currentLevel []*TreeNode currentLevel = append(currentLevel, root) leftToRight := true for len(currentLevel) > 0 { var levelVals []int var nextLevel []*TreeNode for i := len(currentLevel) - 1; i >= 0; i-- { node := currentLevel[i] levelVals = append(levelVals, node.Val) if leftToRight { if node.Left != nil { nextLevel = append(nextLevel, node.Left) } if node.Right != nil { nextLevel = append(nextLevel, node.Right) } } else { if node.Right != nil { nextLevel = append(nextLevel, node.Right) } if node.Left != nil { nextLevel = append(nextLevel, node.Left) } } } result = append(result, levelVals) currentLevel = nextLevel leftToRight = !leftToRight } return result }
AThe code will panic due to nil pointer dereference
BThe code will cause an infinite loop
CThe code will run correctly and produce the expected zigzag output
DThe traversal order of nodes in nextLevel is incorrect, causing wrong zigzag output
Attempts:
2 left
💡 Hint
Check how nextLevel nodes are added and in what order.
🚀 Application
advanced
1:00remaining
Number of Levels in Zigzag Traversal Output
Given a binary tree with 7 nodes arranged as a complete binary tree of height 3, how many levels will the zigzag level order traversal output contain?
A3
B7
C4
D2
Attempts:
2 left
💡 Hint
Think about how many levels a complete binary tree of height 3 has.
Predict Output
expert
3:00remaining
Output of Zigzag Traversal on Unbalanced Tree
What is the output of the zigzag level order traversal for this unbalanced binary tree? Tree structure: - Root: 10 - Root.Left: 5 - Root.Left.Left: 3 - Root.Left.Left.Left: 1 - Root.Right: 15 - Root.Right.Right: 20
DSA Go
package main

import "fmt"

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

func zigzagLevelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }
    var result [][]int
    var currentLevel []*TreeNode
    currentLevel = append(currentLevel, root)
    leftToRight := true

    for len(currentLevel) > 0 {
        var levelVals []int
        var nextLevel []*TreeNode

        for _, node := range currentLevel {
            levelVals = append(levelVals, node.Val)
        }

        if !leftToRight {
            for i, j := 0, len(levelVals)-1; i < j; i, j = i+1, j-1 {
                levelVals[i], levelVals[j] = levelVals[j], levelVals[i]
            }
        }

        for _, node := range currentLevel {
            if node.Left != nil {
                nextLevel = append(nextLevel, node.Left)
            }
            if node.Right != nil {
                nextLevel = append(nextLevel, node.Right)
            }
        }

        result = append(result, levelVals)
        currentLevel = nextLevel
        leftToRight = !leftToRight
    }

    return result
}

func main() {
    root := &TreeNode{Val: 10}
    root.Left = &TreeNode{Val: 5}
    root.Left.Left = &TreeNode{Val: 3}
    root.Left.Left.Left = &TreeNode{Val: 1}
    root.Right = &TreeNode{Val: 15}
    root.Right.Right = &TreeNode{Val: 20}

    result := zigzagLevelOrder(root)
    fmt.Println(result)
}
A[[10], [15, 5], [20, 3], [1]]
B[[10], [5, 15], [3, 20], [1]]
C[[10], [15, 5], [3, 20], [1]]
D[[10], [5, 15], [20, 3], [1]]
Attempts:
2 left
💡 Hint
Remember to alternate the order of nodes at each level, even if the tree is unbalanced.