描述html
求一棵二叉树全部左叶子节点元素值之和。c++
二叉树节点定义以下:函数
struct TreeNode {spa
int val;htm
struct TreeNode *left;blog
struct TreeNode *right;get
};it
题目部分代码已经完成,您只须要补充并提交如下函数:二叉树
int sumOfLeftLeaves(struct TreeNode* root);while
输入
输入为若干个整数(不超过512)表示一棵二叉树顺序表示时的结点元素值,其中0表示二叉树对应结点为空。输入以-1结束。
输出
输出全部左叶子节点元素值之和。
样例输入
1 2 3 4 5 0 0 0 0 6 7 -1
样例输出
10
#include<bits/stdc++.h> 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; }