广度优先遍历,只判断左子树是不是叶子,是的话求和。
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if (root == NULL) return 0;
else{
queue<TreeNode*> q;
q.push(root);
int sum = 0;
while (!q.empty())
{
TreeNode* p = q.front();
q.pop();
if (p->left != NULL)
{
q.push(p->left);
if ((p->left->left == NULL) && (p->left->right == NULL))
sum = sum + p->left->val;
}
if (p->right != NULL)
q.push(p->right);
}
return sum;
}
}
};最优解给的是递归算法。
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if (!root) return 0;
if (root->left && !root->left->left && !root->left->right) return root->left->val + sumOfLeftLeaves(root->right);
return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}
};
本文介绍了一种计算二叉树中所有左叶子节点值之和的方法,提供了两种实现方式:一种是使用队列的广度优先搜索,另一种是采用递归算法。递归算法更简洁且效率更高。
1255

被折叠的 条评论
为什么被折叠?



