leetcode 404.左子叶之和
题干
计算给定二叉树的所有左叶子之和
题解
朴素的dfs
* 效率一般
* 可以考虑在递归调用函数前加if,若孩子节点为空则不调用(时间换空间)
* 注意防御性编程原则
class Solution {
public:
int ans = 0;
void dfs(TreeNode* root,int& ans,int dirMark){//dirMark表示当前节点是上一节点的左孩子(0)右孩子(1),-1表示当前节点是整棵树的根节点
if(root==NULL)
return;
if(dirMark==0 && root->left==NULL && root->right==NULL)
{
ans += root->val;
return;
}
dfs(root->left,ans,0);
dfs(root->right,ans,1);
}
int sumOfLeftLeaves(TreeNode* root) {
dfs(root,ans,-1);
return ans;
}
};