1.题目

计算给定二叉树的所有左叶子之和。

示例:

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7
  6. 在这个二叉树中,有两个左叶子,分别是 9 15,所以返回 24

2.思路

深度优先遍历:

  1. class Solution {
  2. public int sumOfLeftLeaves(TreeNode root) {
  3. return root != null ? dfs(root) : 0;
  4. }
  5. public int dfs(TreeNode node) {
  6. int ans = 0;
  7. if (node.left != null) {
  8. ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);
  9. }
  10. if (node.right != null && !isLeafNode(node.right)) {
  11. ans += dfs(node.right);
  12. }
  13. return ans;
  14. }
  15. public boolean isLeafNode(TreeNode node) {
  16. return node.left == null && node.right == null;
  17. }
  18. }

简洁写法:

  1. public class Solution {
  2. public int sumOfLeftLeaves(TreeNode root) {
  3. if(root == null) {
  4. return 0;
  5. }
  6. int l = 0;
  7. if(root.left != null && root.left.left == null && root.left.right == null){
  8. l = root.left.val;
  9. }
  10. return l + sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
  11. }
  12. }