题目地址(404. 左叶子之和)

https://leetcode-cn.com/problems/sum-of-left-leaves/

题目描述

  1. 计算给定二叉树的所有左叶子之和。
  2. 示例:
  3. 3
  4. / \
  5. 9 20
  6. / \
  7. 15 7
  8. 在这个二叉树中,有两个左叶子,分别是 9 15,所以返回 24

前置知识


公司

  • 暂无

思路

注意左叶子 而不是在左侧的节点
如果左节点不为空,且左节点没有左右孩子,那么这个节点就是左叶子

关键点


代码

  • 语言支持:Java

Java Code:

  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. //1. 递归返回值为左右子树相加的和 参数为节点 不需要变
  18. public int sumOfLeftLeaves(TreeNode root) {
  19. //2. 递归中止条件 节点为空返回0
  20. if (root == null) {
  21. return 0;
  22. }
  23. int left = sumOfLeftLeaves(root.left);
  24. int right = sumOfLeftLeaves(root.right);
  25. int num = 0 ;
  26. //3.递归每层的逻辑判断 是以根节点为中心 左儿子!=null 左儿子的左右儿子都=null 这时将他的值赋给num
  27. if (root.left != null && root.left.right == null && root.left.left == null) {
  28. num = root.left.val;
  29. }
  30. //有左叶子节点就加上这个值 没有就加0
  31. return left + right +num;
  32. }
  33. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:404. 左叶子之和 - 图1#card=math&code=O%28n%29&id=D9hGO)
  • 空间复杂度:404. 左叶子之和 - 图2#card=math&code=O%28n%29&id=umNfj)