描述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; }