代码随想录算法训练营第十五天

力扣题部分:

110.平衡二叉树

题目链接:. - 力扣(LeetCode)

题面:

        给定一个二叉树,判断它是否是平衡二叉树

        平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1

思路(递归):

还是递归三部曲(关于三部曲的具体内容和对递归看法建议可见昨天的文章开头):

        传送门:代码随想录算法训练营第十四天-CSDN博客

确定递归函数的参数和返回值:

不仅仅需要bool判断,还要计算子树深度,所以需要再创建一个函数。

参数:TreeNode * cur,返回值类型:int。

确定终止条件:

如果当前节点为空,return 0。

如果当前节点为叶子节点 return 1。

确定单层递归的逻辑:

为了发现此树不为平衡树,我们需要把发现不平衡的记录传递回去。

所以一发现左右节点差 > 1,return -1。

不仅如此,一发现调用当前节点的左右节点后返回值为-1,同样return -1传递上去。

如果一切正常(没有接触到-1),就和计算最大深度差不多的操作:左右节点都有返回调用其中的最大值 + 1,如果只有左节点 返回调用左节点值 + 1,右节点同理。

如果到了最后,意味着当前节点没被传递-1且为叶子节点,return 1就可以了。

代码实现:

257. 二叉树的所有路径

题目链接. - 力扣(LeetCode)

题面:

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

思路(递归):

确定递归函数的参数和返回值:

最后返回的是字符串数组(restult),再弄一个函数void就可以了,在这个新函数里不断加入一个个字符串进最后的字符串数组里。

由于需要不断递归和相应的回溯操作,我们选择在最后用int数组(paths)转换成字符串,这样的话增删比字符串会方便很多,在此之前,遍历节点只需要把值压进int数组里就可以了。

确定终止条件:

当前节点为空或者当前节点为叶子节点且数组转换后时return;

确定单层递归的逻辑:

如果当前节点为叶子节点,把叶子节点值也压进path数组中,然后开始转换成字符串并压入result

如果当前节点不为叶子节点,先调用子节点,调用完记得将当前节点在path里pop掉

pop的使用其实就是回溯的体现。

代码实现:

404.左叶子之和

题目链接:. - 力扣(LeetCode)

题面:

给定二叉树的根节点 root ,返回所有左叶子之和。

思路(递归):

注意是判断左叶子,不是二叉树左侧节点!

确定递归函数的参数和返回值:

返回int,直接调用所给函数即可。

确定终止条件:

当前节点为空或叶子节点 return 0;

确定单层递归的逻辑:

先将leftsum 和 rightsum初始化

int leftsum = sumOfLeftLeaves(root->left);

int rightsum = sumOfLeftLeaves(root->right);

如果有左节点且子节点有左叶子节点,将初始化的值改成左叶子节点的值。

代码实现:

222.完全二叉树的节点个数

题目链接:. - 力扣(LeetCode)

题面:

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

思路(递归):

确定递归函数的参数和返回值:

返回int,直接调用所给函数即可。

确定终止条件:

当前节点为空return0。

确定单层递归的逻辑:

返回当前节点左节点的节点数 + 右节点的节点数 + 1(自己所占的一个节点数)。

代码实现:

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值