1.通用的方法(求有右叶子节点之和也行):深度优先遍历(递归)
int sumOfLeftLeaves(TreeNode* root)
{
if(!root)return 0;
if(root->left&&!root->left->left&&!root->left->right)
{
return root->left->val+sumOfLeftLeaves(root->right);
}
else
{
return sumOfLeftLeaves(root->left)+sumOfLeftLeaves(root->right);
}
}
2.非递归前序遍历(无法求右叶子节点之和)
int sumOfLeftLeaves(TreeNode* root)
{
if(!root)return 0;
int sum=0;
stack<TreeNode*>s;
s.push(root);
TreeNode*pre=root;
while(!s.empty())
{
TreeNode*top=s.top();
s.pop();
//
if(!top->left&&!top->right&&top==pre->left)
{
sum+=top->val;
}
pre=top;
if(top->right)s.push(top->right);
if(top->left)s.push(top->left);
}
return sum;
}