左叶子之和

对应的核心代码如下所示,同时主要理解思路就是,先判断是不是叶子节点,判断方法为叶子节点是没有子节点的,所以说这个地方,只需要判断该节点的是否有叶子节点即可。

!node->left && !node->right

,同时下面的求和的时候,即就是一个深度优先遍历,找到所有叶子节点且是左孩子的点,然后求和就可以了。特别注意左孩子在有孩子的节点也是有的。所以在右孩子的时候,需要特别注意!
下面是c++代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    bool isLeafNode(TreeNode* node) {
return !node->left && !node->right;
}

int dfs(TreeNode* node) {
int ans = 0;
if (node->left) {
ans += isLeafNode(node->left) ? node->left->val : dfs(node->left);
}
if (node->right && !isLeafNode(node->right)) {
ans += dfs(node->right);
}
return ans;
}

int sumOfLeftLeaves(TreeNode* root) {
return root ? dfs(root) : 0;
}
};