[leetcode]102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

思路:层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。

需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。

而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

大体流程就是:首先根结点先入队,然后根据队列的长度来遍历队列中的所有元素,在每个元素出队的同时,将其子节点依次从左倒右入队,记录当前节点的值。这样就能做到一层一层的遍历。

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) (res [][]int) {
    if root==nil{
        return 
    }
    queue:=list.New()
    //根结点如队列
    queue.PushBack(root)
    for queue.Len()>0{
        length:=queue.Len()
        //临时切片变量接收每一层的值
        var tmp []int
        //遍历当前队列中的元素
        for i:=0;i<length;i++{
            //出队列
            node:=queue.Remove(queue.Front()).(*TreeNode)
            //入队列
            if node.Left!=nil{
                queue.PushBack(node.Left)
            }
            if node.Right!=nil{
                queue.PushBack(node.Right)
            }
            //将值添加进结果切片中
            tmp=append(tmp,node.Val)
        }
        res=append(res,tmp)
    }
    //反转结果集
    // Len:=len(res)
    // for i:=0;i<Len/2;i++{
    //     res[i],res[Len-i-1]=res[Len-i-1],res[i]
    // }
    return
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值