[LeetCode]404. Sum of Left Leaves
题目描述
思路
BFS和DFS均可
BFS较为简单
DFS需要考虑判断节点是否为左子节点的问题,参考了答案,在函数里添加了入参 isleft
代码
#include<iostream>
#include<queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
/*BFS
int sumOfLeftLeaves(TreeNode* root) {
if (!root)
return 0;
queue<TreeNode*> q;
int res = 0;
q.push(root);
while (!q.empty()){
TreeNode* node = q.front();
q.pop();
if (node->left) {
q.push(node->left);
if (node->left->left == NULL && node->left->right == NULL)
res += node->left->val;
}
if (node->right)
q.push(node->right);
}
return res;
}
*/
/*DFS*/
int sumOfLeftLeaves(TreeNode* root, bool isleft = false) {
if (!root)
return 0;
if (root->left == NULL && root->right == NULL)
return isleft ? root->val : 0;
return sumOfLeftLeaves(root->left, true) + sumOfLeftLeaves(root->right, false);
}
};
int main() {
TreeNode* r1 = new TreeNode(1);
TreeNode* r2 = new TreeNode(1);
TreeNode* r3 = new TreeNode(1);
TreeNode* r4 = new TreeNode(1);
r1->left = r2;
r1->right = r3;
r3->left = r4;
Solution s;;
cout << s.sumOfLeftLeaves(r1) << endl;
system("pause");
}