前言
在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接
题目
给定二叉树的根节点 root ,返回所有左叶子之和。
1.递归
此题可以使用前序递归遍历。
2. 本题思路分析:
- 递归三部曲,第一步确定参数和返回值。
- 参数应该是,当前节点和目前累加的总和
- 第二步确定递归截止条件,当遇到叶子节点,停止递归。
- 节点是空节点时
- 第三步,单层递归逻辑
- 因为是前序遍历,所以先判断当前节点是否为“左孩子节点”,若是则加入当前节点的值加入总和
- 之后就是处理左右孩子,先递归左孩子,返回值为最新总和,再递归右孩子,返回值为最新总和。
3. 算法实现
- 代码:
//递归法(后序遍历)因为是求高度,所以是后序遍历
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
int sum = 0;
return travel(root,sum);
}
public int travel(TreeNode root,int sum){
if(root == null){
return sum;
}
if(root.left != null && root.left.left == null && root.left.right == null){
sum += root.left.val;
}
sum = travel(root.left,sum);
sum = travel(root.right,sum);
return sum;
}
}
4. 算法复杂度
暂无
5. 算法坑点
- 题目中说的是左叶子节点,不是出现再左子树中的节点。