【Golang主题学习月】 刷题比玩游戏好多了,成就感越来越强,每天坚持刷一道题,每天锻炼30分钟,等8块腹肌,等大厂offer.
😄
我相信,如果在面试中遇到此题,逻辑清晰、正确表达出来、手撕
应该会超过一部分的面试者。
leecode 102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例: 二叉树:[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 //右节点
* }
*/
-
将整棵树怼进队列里。
-
取出这颗树,添加根节点到数组里。
-
取出的这棵树,如果左节点不为空,就添加道队列里,右节点不为空,也添加道队列里。
4.如果队列不为空,弹出最先进去的,添加根节点到数组里,回到第三步,直接队列里没有元素。
- 将根节点怼进数组。 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块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️