1. 递归
递归求解左叶子的和,直接在最小的树(2层)中定位到左叶子,而不是递归到只剩一个节点,因为这样无法判断左右。
时间O(n),空间O(n).  
1 2 3 4 5 6 7 8 9 10 11
   | class Solution { public:     int sumOfLeftLeaves(TreeNode* root) {         if (root == nullptr)             return 0;         else if (root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr)             return root->left->val + sumOfLeftLeaves(root->right);         else             return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);     } };
  | 
 
2. 迭代
使用层次遍历,逐个判断是否为左叶子。
时间O(n),空间O(n)。  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | class Solution { public:     int sumOfLeftLeaves(TreeNode* root) {         if (root == 0)             return 0;
          int ans = 0;         queue<TreeNode*> q;         q.push(root);         while (!q.empty()) {             TreeNode* cur = q.front();             q.pop();             if (cur->left != nullptr && cur->left->left == nullptr && cur->left->right == nullptr)                 ans += cur->left->val;             else if (cur->left != nullptr)                 q.push(cur->left);             if (cur->right != nullptr)                 q.push(cur->right);         }
          return ans;     } };
  |