题目链接:LeetCode 404. 左叶子之和
题意:
计算给定二叉树的所有左叶子之和。
示例:
3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
解题思路:
就正常的dfs或者bfs,判断是否为叶子节点,如果是左节点,就加上他的值
DFS
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
int ans = 0;
public:
bool isLeaf(TreeNode* node) {
return !node->left && !node->right;
}
void dfs(TreeNode* root) {
if(root == NULL) {
return ;
}
if(root->left) {
if(isLeaf(root->left)) {
ans += root->left->val;
} else {
dfs(root->left);
}
}
if(root->right) {
dfs(root->right);
}
}
int sumOfLeftLeaves(TreeNode* root) {
if(root == NULL) {
return 0;
}
dfs(root);
return ans;
}
};
BFS
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isLeaf(TreeNode* node) {
if(node->left == NULL && node->right == NULL) {
return true;
}
return false;
}
int sumOfLeftLeaves(TreeNode* root) {
int ans = 0;
if(root == NULL) {
return 0;
}
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
TreeNode* node = q.front();
q.pop();
if(node->left) {
if(isLeaf(node->left)) {
ans += node->left->val;
} else {
q.push(node->left);
}
}
if(node->right) {
q.push(node->right);
}
}
return ans;
}
};
想要变强,就自己先想一种解决办法,然后学会其他人的方法