- 描述:Find the sum of all left leaves in a given binary tree.
Example:
\
3 / \ 9 20 / \ 15 7
There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.
- 分析:求出所给二叉树左叶子节点之和。
- 思路一:用stack实现dfs。这道题的关键在于如何判断这个左节点是叶子节点,可以判断这个左节点的左右节点是否为空来进行判断。
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if (root == NULL) return 0;
vector<TreeNode*> my_stack;
my_stack.push_back(root);
int res = 0;
while (!my_stack.empty()) {
TreeNode* temp = my_stack.back();
my_stack.pop_back();
if (temp -> right) my_stack.push_back(temp -> right);
if (temp -> left) {
if (temp -> left -> left == NULL && temp -> left -> right == NULL) res += temp -> left -> val;
my_stack.push_back(temp -> left);
}
}
return res;
}
};
- 思路二:用递归实现。
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if (root == NULL) return 0;
if (root -> left != NULL && root -> left -> left == NULL && root -> left -> right == NULL)
return root -> left -> val + sumOfLeftLeaves(root -> right);
return sumOfLeftLeaves(root -> left) + sumOfLeftLeaves(root -> right);
}
};