二叉树之层序遍历|Go主题月

4,569 阅读2分钟

【Golang主题学习月】 刷题比玩游戏好多了,成就感越来越强,每天坚持刷一道题,每天锻炼30分钟,等8块腹肌,等大厂offer.

😄

 \color{red}{~}

我相信,如果在面试中遇到此题,逻辑清晰、正确表达出来、手撕

应该会超过一部分的面试者。

leecode 102. 二叉树的层序遍历

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

 

示例: 二叉树:[3,9,20,null,null,15,7],

图片.png 返回其层序遍历结果:

[ [3], [9,20], [15,7] ]


层序遍历,顾名思义,就是一层一层遍历,从上到下,从左到右。

这个时候,我们想一想用栈能实现吗?

因为栈是先进后出的,但是我们要求是层序遍历,很明显是先进先出

那么就会使用到队列这个数据结构,因为它是先进先出。

参考代码

定义一颗树

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int          // 根
 *     Left *TreeNode   //左节点
 *     Right *TreeNode  //右节点
 * }
 */
  1. 将整棵树怼进队列里。

  2. 取出这颗树,添加根节点到数组里。

  3. 取出的这棵树,如果左节点不为空,就添加道队列里,右节点不为空,也添加道队列里。

4.如果队列不为空,弹出最先进去的,添加根节点到数组里,回到第三步,直接队列里没有元素。

  1. 将根节点怼进数组。 GO语言版 递归
func levelOrder(root *TreeNode) [][]int {
    ret := [][]int{}  // 定义一个存放遍历之后的数组
    if root == nil {
        return ret
    }
    q := []*TreeNode{root}  // 将整颗树怼进队列里
    for i := 0; len(q) > 0; i++ {
        ret = append(ret, []int{})  
        p := []*TreeNode{}
        for j := 0; j < len(q); j++ {
            node := q[j]
            ret[i] = append(ret[i], node.Val)
            if node.Left != nil {
                p = append(p, node.Left) // 
            }
            if node.Right != nil {
                p = append(p, node.Right)
            }
        }
        q = p
    }
    return ret
}











真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️  求分享👥  对8块腹肌的我来说真的 非常有用!!!



如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️