ZBLOG

golang 蛇形遍历二叉树

在Golang中,可以使用队列来进行蛇形遍历二叉树。首先,定义一个二叉树节点的结构体:

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

然后,实现蛇形遍历函数:

func snakeTraversal(root *TreeNode) []int {
    if root == nil {
        return nil
    }
    
    var result []int       // 存储结果的切片
    queue := []*TreeNode{} // 辅助队列
    
    queue = append(queue, root) // 根节点入队列
    forward := true             // 标志位,用于控制每层节点遍历方向
    
    for len(queue) > 0 {
        levelSize := len(queue)               // 当前层的节点数量
        
        var levelNodes []int                  // 当前层的节点值
        
        for i := 0; i < levelSize; i++ {
            node := queue[0]                  // 队首节点出队列
            
            if forward {                      // 节点值添加顺序根据标志位决定(正序或逆序)
                levelNodes = append(levelNodes, node.Val)
            } else {
                levelNodes = append([]int{node.Val}, levelNodes...)
            }
            
            queue = queue[1:]                 // 出队列
            
            if node.Left != nil {             // 左子节点入队列
                queue = append(queue, node.Left)
            }
            
            if node.Right != nil {            // 右子节点入队列
                queue = append(queue, node.Right)
            }
        }
        
        result = append(result, levelNodes...) // 将当前层节点值添加到结果切片中
        
        forward = !forward                     // 反转标志位,改变下一层遍历方向
    }
    
    return result
}

使用示例:

func main() {
    /*
           1
          / \
         2   3
        / \ / \
       4  5 6  7
    */
   
   root := &TreeNode{
       Val:   1,
       Left:  &TreeNode{Val: 2, Left: &TreeNode{Val: 4}, Right: &TreeNode{Val: 5}},
       Right: &TreeNode{Val: 3, Left: &TreeNode{Val: 6}, Right: &TreeNode{Val: 7}},
   }
   
   result := snakeTraversal(root)
   fmt.Println(result) // 输出:[1 3 2 4 5]
}

以上代码实现了蛇形遍历二叉树,并将节点的值按照蛇形顺序存储在一个切片中。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17796

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?