题目
计算给定二叉树的所有左叶子之和。
示例1
输入:
3
/ \
9 20
/ \
15 7
输出:
24
解法:
- 注意回溯退出的条件,当空指针时为0
- 如果该节点的左节点是叶节点(无儿子节点),直接加上左边叶节点的值,防止这个节点在后续遍历的时候漏了
- 左右节点分别回溯
代码
#include <stdio.h>
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
int ans = 0;
if(root==nullptr){return 0;}
if(root->left!=nullptr && root->left->left==nullptr && root->left->right==nullptr)
ans += root->left->val;
return ans+sumOfLeftLeaves(root->left)+sumOfLeftLeaves(root->right);
}
};
int main()
{
TreeNode root(3);
TreeNode node1(9);TreeNode node2(20);
TreeNode node3(15);TreeNode node4(7);
root.left = &node1;root.right=&node2;
node2.left = &node3;node2.right = &node4;
Solution s;
int ans =s.sumOfLeftLeaves(&root);
cout<<ans;
return 0;
}
今天也是爱zz的一天哦!