欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Leetcode 404-左叶子之和

Leetcode 404-左叶子之和

2024/10/25 7:28:07 来源:https://blog.csdn.net/Helene1996/article/details/141756415  浏览:    关键词:Leetcode 404-左叶子之和

题目

给定二叉树的根节点 root ,返回所有左叶子之和。
在这里插入图片描述
在这里插入图片描述

题解

二叉树的题目,如果需要返回某个值,可以分左右子树递归计算,最后sum=left+right

递归三部曲:

  • 确定递归函数的参数和返回值
    判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int,使用题目中给出的函数就可以了。
  • 确定终止条件
    如果遍历到空节点,那么左叶子值一定是0
  • 确定单层递归的逻辑
    当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。

代码中left为什么要分两块计算而right不用?
因为如果直接计算sumOfLeftLeaves(root.left)而root.left恰好为左叶子,则在进入root.left那一层时不再满足(root.left!=null&&root.left.left==null && root.left.right ==null)这个条件,所以left计算要分是否是左叶子两种情况计算

class Solution {public int sumOfLeftLeaves(TreeNode root) {int sum,right,left;//边界条件if(root==null) return 0;/*这里left为什么要分两块计算而right不用?因为如果直接计算sumOfLeftLeaves(root.left)而root.left恰好为左叶子,则在进入root.left那一层时不再满足(root.left!=null&&root.left.left==null&&root.left.right==null)这个条件,所以left计算要分是否是左叶子两种情况计算*///满足条件:为左叶子if(root.left!=null&&root.left.left==null&&root.left.right==null){left=root.left.val;}else{left=sumOfLeftLeaves(root.left);}right=sumOfLeftLeaves(root.right);//返回值return left+right;}
}

错误做法:

使用全局变量计算左叶子之和,遇到左叶子时返回会使得root刚好只有一个左叶子节点时就返回了,不会进入右子树

class Solution {public int res;public int sumOfLeftLeaves(TreeNode root) {dfs(root);return res;}public void dfs(TreeNode root){//为空if(root==null) return;//满足条件:左叶子,结果集+left.val//这个做法会使得root刚好只有一个左叶子节点时就返回了,不会进入右子树//为了避免这种情况,需要返回某个值而不是直接返回if(root.left!=null&&root.left.left==null&&root.left.right==null){res+= root.left.val;return; }//不为叶子节点if(root.left!=null||root.right!=null){dfs(root.left);dfs(root.right);//注意root的右子树也可能有左叶子}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com