C++算法练习-day35——404.左叶子之和

[复制链接]
发表于 2025-12-30 14:08:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
标题泉源:. - 力扣(LeetCode)

标题思绪分析

标题要求盘算给定二叉树中全部左叶子节点的和。叶子节点是指没有子节点的节点。左叶子节点是指位于某个节点的左子树中的叶子节点。
办理这个标题标思绪如下:

  • 界说叶子节点:起首,我们必要一个函数来判定一个节点是否是叶子节点。
  • 递归遍历:然后,我们利用递归的方法遍历整棵树。
  • 判定和累加:在遍历的过程中,我们查抄当前节点的左子节点,假如它是叶子节点,则将其值累加到结果中;假如不是叶子节点,则递归地皮算其左子树中全部左叶子节点的和。对于右子树,我们只需递归地皮算其全部左叶子节点的和(由于当前节点的右子树与当前节点的左叶子节点无关)。
代码:

  1. /**  
  2. * Definition for a binary tree node.  
  3. * struct TreeNode {  
  4. *     int val;  
  5. *     TreeNode *left;  
  6. *     TreeNode *right;  
  7. *     TreeNode() : val(0), left(nullptr), right(nullptr) {}  
  8. *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}  
  9. *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}  
  10. * };  
  11. */  
  12. class Solution {  
  13. public:  
  14.     // 判断一个节点是否是叶子节点  
  15.     bool isLeaves(TreeNode* root){  
  16.         // 叶子节点没有左子节点和右子节点  
  17.         return (!root->left && !root->right);  
  18.     }  
  19.       
  20.     // 计算二叉树中所有左叶子节点的和  
  21.     int sumOfLeftLeaves(TreeNode* root) {  
  22.         // 如果当前节点为空,返回0  
  23.         if(!root) return 0;  
  24.          
  25.         int ans = 0;  
  26.          
  27.         // 检查左子节点  
  28.         if(root->left){  
  29.             // 如果左子节点是叶子节点,将其值累加到结果中  
  30.             // 否则,递归地计算其左子树中所有左叶子节点的和  
  31.             ans += isLeaves(root->left) ? root->left->val : sumOfLeftLeaves(root->left);  
  32.         }  
  33.          
  34.         // 对于右子树,只需递归地计算其所有左叶子节点的和  
  35.         // 注意:这里先检查root->right是否存在且不是叶子节点,以优化性能  
  36.         if(root->right && !isLeaves(root->right)){  
  37.             ans += sumOfLeftLeaves(root->right);  
  38.         }  
  39.          
  40.         return ans;  
  41.     }  
  42. };
复制代码
知识点择要


  • 叶子节点的界说:没有左子节点和右子节点的节点被称为叶子节点。
  • 递归遍历:递归是一种办理树布局标题标常用方法,通过不停地将标题分解为子标题来办理。
  • 条件判定:在编程中,利用条件判定语句(如if语句)来根据条件实验差别的代码块。
  • 累加利用:利用累加器(如变量ans)来存储和盘算一系列数值的总和。
通过本题,我们学习了怎样判定一个节点是否是叶子节点,以及怎样利用递归的方法遍历二叉树并盘算特定节点的和。递归是一种强盛的编程本领,特殊实用于办理树布局干系的标题。在实际应用中,我们还必要注意递归的深度,以制止出现栈溢出等标题。通过不停地练习和思索,我们可以更加熟练地把握这种本领,并将其应用于更复杂的场景中。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表