「这是我参与2022首次更文挑战的第 15 天,活动详情查看:2022首次更文挑战」
题目链接
404. 左叶子之和 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
计算给定二叉树的所有左叶子之和。
测试用例
示例 1:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
题目分析
题目要求非常简单,只需要我们求出一颗二叉树上所有的左叶子节点的值之和,即上图中标记出的节点
我们需要先定位到题目要我们求和的节点具备的特征:
- 这种节点没有子节点
- 这种节点是其父节点的左子节点
那么,我们将目光聚焦到左叶子节点明显无法解决问题,我们需要判断出这种节点的父节点,如下图示
将条件转化后,会变为,这种父节点会有一个左子结点,且这个左子节点下不会有任何的子节点。当我们查找到这样的节点后,直接将这个节点的左子节点的值累加起来即可
大致的函数实现就是,遍历一个节点,在非空的情况下,判断他的左子节点不为空,并且左子节点为叶子节点的情况下,累加上这个节点的左子节点的值,然后以递归的模式,继续去遍历这个节点的左右子节点
代码实现
var sumOfLeftLeaves = function(root) {
let sum = 0;
trave(root);
return sum;
function trave(root) {
if (root == null) return;
trave(root.left);
trave(root.right);
if (root.left != null && root.left.left == null && root.left.right == null) {
sum += root.left.val;
}
}
};
当我们捋清楚二叉树的结构以及递归的使用方式,就能很轻易的解决这题