categories: [Blog,Algorithm]


404. 左叶子之和

难度简单286
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24.

一个节点为「左叶子」节点,当且仅当它是某个节点的左子节点,并且它是一个叶子结点。因此我们可以考虑对整棵树进行遍历,当我们遍历到节点
node 时,如果它的左子节点是一个叶子结点,那么就将它的左子节点的值累加计入答案。

遍历整棵树的方法有深度优先搜索和广度优先搜索,下面分别给出了实现代码。

深度优先搜索

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public int sumOfLeftLeaves(TreeNode root) {
  12. return root != null ? dfs(root) : 0;
  13. }
  14. public int dfs(TreeNode node) {
  15. int ans = 0;
  16. if (node.left != null) {
  17. ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);
  18. }
  19. if (node.right != null && !isLeafNode(node.right)) {
  20. ans += dfs(node.right);
  21. }
  22. return ans;
  23. }
  24. public boolean isLeafNode(TreeNode node) {
  25. return node.left == null && node.right == null;
  26. }
  27. // 作者:LeetCode-Solution
  28. // 链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/zuo-xie-zi-zhi-he-by-leetcode-solution/
  29. }

广度优先遍历

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public int sumOfLeftLeaves(TreeNode root) {
  12. if (root == null) {
  13. return 0;
  14. }
  15. Queue<TreeNode> queue = new LinkedList<TreeNode>();
  16. queue.offer(root);
  17. int ans = 0;
  18. while (!queue.isEmpty()) {
  19. TreeNode node = queue.poll();
  20. if (node.left != null) {
  21. if (isLeafNode(node.left)) {
  22. ans += node.left.val;
  23. } else {
  24. queue.offer(node.left);
  25. }
  26. }
  27. if (node.right != null) {
  28. if (!isLeafNode(node.right)) {
  29. queue.offer(node.right);
  30. }
  31. }
  32. }
  33. return ans;
  34. }
  35. public boolean isLeafNode(TreeNode node) {
  36. return node.left == null && node.right == null;
  37. }
  38. // 作者:LeetCode-Solution
  39. // 链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/zuo-xie-zi-zhi-he-by-leetcode-solution/
  40. }