代码随想录算法训练营第十五天 | 层序遍历

代码随想录算法训练营第十五天(1) | 层序遍历

链接: 层序遍历
链接: 226.翻转二叉树

看完代码随想录之后的想法

(1)层序遍历:使用队列实现层序遍历,也就是广度优先搜索。从根节点开始,push进入队列中并记录此时队列中的数量size,将size个元素依次pop出队列,每个元素pop出来的时候需要将它的子节点push进入队列。使用二维数组记录最终结果并返回。然后做一做十道题。
以下是自己写题的想法:
(2)107. 二叉树的层序遍历 II:
题目要求自底向上进行层序遍历(叶子从左到右):不知道怎么做,看答案。看完答案发现是用链表存储层序遍历的结果,并且用头插法将答案进行反转即可。
(3)199. 二叉树的右视图:
这题乍一看我的想法就是,层序遍历在每个元素弹出的时候只在队列中存入它的右节点即可。看完题解发现自己的想法有漏洞,应该是每一层的最后一个节点,而不是每个节点弹出的右节点。
(4)637. 二叉树的层平均值:和层序遍历的大体思路相同,利用队列来辅助层序遍历的实现,返回的result数组由原来的二维数组改成一维数组,每一层都进行平均放入result数组中。这个时候就不适合用while和size–来进行循环每层了,因为最终计算平均的时候需要size,所以最好还是用for循环。
(5)429.N叉树的层序遍历:看到这题我觉得难点在,我们知道二叉树的根节点访问子节点可以直接调用left和right,但是N叉树如何根据根节点获得它的子节点呢?可以看到直接用for迭代器取出当前节点cur的所有children,然后offer入队列中。

for (Node child : cur.children) {
   queue.offer(child);
   }

(6)515.在每个树行中找到最大值:层序遍历,取出每层的最大值,我第一想法是节点的值存入数组之后调用数组的最大值API? 尝试之后发现报错,求一个数组的中的最大值不太清楚。看了解答发现是设定一个整数作为当前最大值,每层的节点从队列中取出来之后都要与当前最大值进行比较,一层遍历完之后把那个最大值加入数组中。
查阅资料后发现,在java中找到数组最大值最小值:使用 stream,将一个数组放进 stream 里面,然后直接调用 stream 里的 min 或 max 函数得到最大值或最小值。
(7)116.填充每个节点的下一个右侧节点指针:层序遍历每次结束在数组中加入一个“#”,这是什么很难的事情吗?(逐渐昂起头颅)额。。突然发现返回的是Node,而不是数组诶。好吧,我不会了。看完答案后才发现自己题目都没有理解,并不是图上画的那么简单,而是每一层的节点从左到右构成链表。
(8)117.填充每个节点的下一个右侧节点指针2:跟上一题一模一样,没变化
(9)104.二叉树的最大深度:层序遍历,每层结束之后进行加一操作,最后返回层数即可。秒了。
(10)111.二叉树的最小深度:这题直接看的答案,用的是递归方法,重要的是各种情况的梳理,如果左右孩子都是null那么这个节点就是叶子节点,其实我不是很弄明白递归到底要怎么一步步看它的结果来验证整个流程。

226.翻转二叉树:递归法前序遍历交换每个节点的左右孩子。说起来简单,但是我其实依然有很多待落实的疑问:第一个就是递归的过程并没有理解,好吧主要就是递归的过程没有理解。经过查阅一些资料看一些博主的解答我暂时明白了递归该怎样去思考,只要代码的边界条件和非边界条件的逻辑写对了,其他的事情交给数学归纳法就好了。也就是说,写对了这两个逻辑,你的代码自动就是正确的了,没必要想递归是怎么一层一层走的。递归需要多多练习。

自己实现过程中遇到哪些困难

1.实现代码中,对于队列的创建声明以及队列的api有些不熟悉,以下:

Queue<TreeNode> que = new LinkedList<TreeNode>();
boolean offer(Object e):将指定元素加入该队列的尾部,当使用有容量限制的队列时,此方法通常比void add(Object e)方法更好,使用此方法时,如果发现队列已满无法添加时,会直接返回false
Object poll():获取队列头部的元素,并删除该元素,如果此队列为空,则返回null
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值