描述
求一棵二叉树所有左叶子节点元素值之和。
二叉树节点定义如下:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
题目部分代码已经完成,您只需要补充并提交以下函数:
int sumOfLeftLeaves(struct TreeNode* root);
输入
输入为若干个整数(不超过512)表示一棵二叉树顺序表示时的结点元素值,其中0表示二叉树对应结点为空。输入以-1结束。
输出
输出所有左叶子节点元素值之和。
样例输入
1 2 3 4 5 0 0 0 0 6 7 -1
样例输出
10
#include
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int s;
void dfs(TreeNode*root)
{
if(!root)
return;
if(root->left)
{
if(!root->left->left&&!root->left->right)
s+=root->left->val;
dfs(root->left);
}
if(root->right)
dfs(root->right);
}
int sumOfLeftLeaves(TreeNode* root)
{
dfs(root);
return s;
}
TreeNode*creat()
{
int front=1,rear=0,x;
TreeNode*qu[1005],*t,*root=NULL;
while(scanf("%d",&x)!=EOF,x!=-1)
{
if(x==0)
t=NULL;
else
{
t=new TreeNode;
t->val=x;
t->left=NULL;
t->right=NULL;
}
qu[++rear]=t;
if(rear==1)
root=t;
else
{
if(t&&qu[front])
{
if(rear%2==0)
qu[front]->left=t;
else
qu[front]->right=t;
}
if(rear%2==1)
front++;
}
}
return root;
}
int main()
{
TreeNode*x=creat();
printf("%d\n",sumOfLeftLeaves(x));
return 0;
}