#include <iostream>
#include <vector>
#include <stack>
#include <list>
#include <queue>
#include<string>
using namespace std;
typedef struct node
{
int val;
struct node* left;
struct node* right;
}node_t;
using namespace std;
int leftNodeSum(node_t* root, bool isLeftNode)
{
//如果当前节点是空节点,那么左叶子之和为0
if (root == NULL)
{
return 0;
}
//如果当前节点不是空节点
//判断当前节点是不是左叶子节点,如果是,返回这个节点的值
if (isLeftNode && root->left == NULL && root->right == NULL)
{
return root->val;
}
//如果不是左叶子节点,就接着求该根节点的左子树和右子树的左叶子节点之和
int left = leftNodeSum(root->left, true);
int right = leftNodeSum(root->right, false);
return left + right;
}
int main()
{
node_t root;
root.val = 1;
node_t node2;
node2.val = 2;
node_t node3;
node3.val = 3;
node_t node4;
node4.val = 4;
node_t node5;
node5.val = 5;
node_t node6;
node6.val = 6;
node_t node7;
node7.val = 7;
node_t node8;
node8.val = 8;
root.left = &node2;
root.right = &node3;
node2.left = &node4;
node2.right = &node5;
node3.left = &node6;
node3.right = NULL;
node6.left = &node7;
node6.right = NULL;
node7.left = &node8;
node7.right = NULL;
node8.left = NULL;
node8.right = NULL;
node4.left = NULL;
node4.right = NULL;
node5.left = NULL;
node5.right = NULL;
int sumRet = leftNodeSum(&root, false);
cout << "sumRet_____________________________________" << sumRet << endl;
}