代码随想录算法训练营第十五天|层序遍历、226.翻转二叉树、101.对称二叉树

代码随想录算法训练营第十五天|层序遍历、226.翻转二叉树、101.对称二叉树

层序遍历

题目:层序遍历
题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/
https://leetcode.cn/problems/binary-tree-right-side-view/
https://leetcode.cn/problems/average-of-levels-in-binary-tree/
https://leetcode.cn/problems/n-ary-tree-level-order-traversal/
https://leetcode.cn/problems/find-largest-value-in-each-tree-row/
https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/
https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/
https://leetcode.cn/problems/maximum-depth-of-binary-tree/
文章讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1GY4y1u7b2/
状态:

自己看到题目的第一想法

直接看视频,加快效率

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

使用队列来实现层序遍历,队列在执行循环过程中存储二叉树每一层的元素。
使用两个while循环处理逻辑,外层while循环判断队列是否为空,取队列的size作为本层的节点数用于内层while循环的条件,并构建空数组用于存储内层循环的返回值;内层while循环是遍历该层的节点逻辑,其循环判断条件为size是否大于0,并且在每次遍历节点时都将该节点的left和right加入到队列中(判空),每次执行完那层循环,size都会–。

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

十道题整体思路都差不多,没什么问题。

翻转二叉树

226.翻转二叉树
文章讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html
题目链接:https://leetcode.cn/problems/invert-binary-tree/
视频讲解:https://www.bilibili.com/video/BV1sP4y1f7q7/

自己看到题目的第一想法

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

  1. 使用前序或者后序遍历+递归的方式去遍历二叉树,然后将左右进行翻转
  2. 确定递归三部曲:
    • 确定递归函数的参数和返回值
    • 确定终止条件
    • 确定确定单层递归的逻辑

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

看完视频后实现比较简单

对称二叉树

101. 对称二叉树
文章讲解:https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html
题目链接:https://leetcode.cn/problems/symmetric-tree/
视频讲解:https://www.bilibili.com/video/BV1ue4y1Y7Mf/

自己看到题目的第一想法

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

  1. 使用后序遍历法,因为前序、中序都会先处理中间节点,而早的处理中间会导致无法感知到下级左右节点是否能对称
  2. 确定递归三部曲:
    • 确定递归函数的参数和返回值(返回值为boolean,参数为leftNode和rightNode)
    • 确定终止条件(两个为null返回true,一个为null一个不为null返回false,都不为null但是不想等返回false)
    • 确定确定单层递归的逻辑(取两个要比较的下级节点进行递归比较,内侧比较和外侧比较用2个递归)

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

在处理完内侧比较和外侧比较后需要将外侧比较结果 && 内侧比较结果做返回。需要考虑到这个点。

今日收获&学习时长

学习了多个二叉树遍历的处理逻辑。
第一个是层序遍历,通过将节点放入到队列中,用队列的size控制循环的次数处理单层遍历的结果。
第二个是翻转二叉树,看到二叉树题目时,首先要考虑到遍历的方式,翻转二叉树的上下级节点不进行交换,因此可以采用前序遍历+递归的方式去处理,前序遍历先处理中间节点,然后再处理递归节点,中间节点直接交换中间节点的左右,然后再用递归去处理中间节点的左节点和右节点。
第三个是对称二叉树,同样看到二叉树题目时要考虑到遍历方式,因为对称二叉树的判断不能先处理中间节点,需要把中间节点的处理留在最后,因此使用后序遍历,先处理左右、再处理中。这里需要关注的是递归遍历法时的三大原则:1. 出入参确定(这里对称的话入参需要2个节点)2. 确定终止条件 3. 确定单层递归的逻辑。

今天学习了大概2个多小时,都是先看视频再完成代码,早上层序遍历连做了10题感觉记住了层序遍历的逻辑。后面的翻转二叉树和对称二叉树相对来说思路没这么清晰,还需要加强一下重刷一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值