LeetCode 102. 二叉树的层序遍历

题目链接:LeetCode 102. 二叉树的层序遍历

题意:

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

解题思路:

借助一个队列,记录每一层的节点,实现层序遍历

代码1:

func levelOrder(root *TreeNode) [][]int {
    var res [][]int
    var query []*TreeNode  //队列,记录每一层的节点
    if root !=nil{
        query = append(query,root)  //若头节点不空,先放入队列中
    }
    for len(query) != 0 {
        var level []int  //记录每一层的节点
        len := len(query)
        for len > 0 {
            len--
            temp := query[0]  //队头节点
            query = query[1:] //队头出队
            level = append(level,temp.Val)
            if temp.Left != nil{
                query = append(query,temp.Left)
            }
            if temp.Right != nil{
                query = append(query,temp.Right)
            }
        } 
        res = append(res,level)
    } 
    return res
}

代码2

/**
 * 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 
    }

    curLevel := []*TreeNode{root}  // 存放当前层节点
    for len(curLevel) > 0 {
        nextLevel := []*TreeNode{}  // 准备通过当前层生成下一层
        vals := []int{}

        for _, node := range curLevel {
            vals = append(vals, node.Val) // 收集当前层的值
            // 收集下一层的节点
            if node.Left != nil {
                nextLevel = append(nextLevel, node.Left)
            }
            if node.Right != nil {
                nextLevel = append(nextLevel, node.Right)
            }
        }
        res = append(res, vals)
        curLevel = nextLevel // 将下一层变成当前层
    }

    return
}

posted @ 2023-05-15 17:42  小星code  阅读(12)  评论(0)    收藏  举报