题目地址(404. 左叶子之和)
https://leetcode-cn.com/problems/sum-of-left-leaves/
题目描述
计算给定二叉树的所有左叶子之和。示例:3/ \9 20/ \15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
前置知识
公司
- 暂无
思路
注意左叶子 而不是在左侧的节点
如果左节点不为空,且左节点没有左右孩子,那么这个节点就是左叶子
关键点
代码
- 语言支持:Java
Java Code:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {//1. 递归返回值为左右子树相加的和 参数为节点 不需要变public int sumOfLeftLeaves(TreeNode root) {//2. 递归中止条件 节点为空返回0if (root == null) {return 0;}int left = sumOfLeftLeaves(root.left);int right = sumOfLeftLeaves(root.right);int num = 0 ;//3.递归每层的逻辑判断 是以根节点为中心 左儿子!=null 左儿子的左右儿子都=null 这时将他的值赋给numif (root.left != null && root.left.right == null && root.left.left == null) {num = root.left.val;}//有左叶子节点就加上这个值 没有就加0return left + right +num;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=D9hGO)
- 空间复杂度:
#card=math&code=O%28n%29&id=umNfj)
