404. 左葉子之和

知識點:二叉樹

題目描述

計算給定二叉樹的所有左葉子之和。。

示例
  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7
  6. 在這個二叉樹中,有兩個左葉子,分別是 9 15,所以返回 24

解法一:DFS

函式功能:左葉子之和

1.終止條件:root為空,返回0;

2.能做什麼:判斷自己的左節點是否為空,不為空的話判斷它是不是葉子節點,是的話就加到sum上;不是的話那就接著去看子樹;

3.什麼時候做:從上到下,先弄自己的,再去弄子樹的,前序;

做這類二叉樹的題目,多半是遍歷樹,遍歷的過程中進行一些計算。

我們可以先序遍歷這個樹,遍歷的同時判斷當前點是否有左孩子,如果有左孩子,那左孩子是不是葉子節點,都滿足的話那就是左葉子節點,累加。然後直到遍歷結束;

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. int sum = 0;
  18. public int sumOfLeftLeaves(TreeNode root) {
  19. if(root == null) return 0;
  20. if(root.left != null && root.left.left == null && root.left.right == null){
  21. sum += root.left.val;
  22. }
  23. sumOfLeftLeaves(root.left);
  24. sumOfLeftLeaves(root.right);
  25. return sum;
  26. }
  27. }