本文主要是介绍LC 404.左叶子之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
404. 左叶子之和
给定二叉树的根节点 root
,返回所有左叶子之和。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
示例 2:
输入: root = [1]
输出: 0
提示:
- 节点数在
[1, 1000]
范围内 - − 1000 ≤ N o d e . v a l ≤ 1000 -1000 \leq Node.val \leq 1000 −1000≤Node.val≤1000
解法一(前序遍历)
思路分析:
- 采用前序遍历,对二叉树进行遍历,然后在遍历过程中,计算左叶子之和
- 对于前序遍历采用递归的方式
- 首先思考递归的参数和返回值类型,因为是遍历二叉树,所以递归函数返回为
void
,同时递归函数的参数为二叉树的节点 - 然后考虑递归的边界条件,即节点为
null
时,不需要往下遍历 - 然后思考递归的过程,即对于左子节点进行一次判断,若左子节点不为空,且为叶子节点,则进行一次求和
- 首先思考递归的参数和返回值类型,因为是遍历二叉树,所以递归函数返回为
实现代码如下:
class Solution {private int ans = 0;public int sumOfLeftLeaves(TreeNode root) {pre(root);return ans;}private void pre(TreeNode node) {if (node == null)return ; // 考虑边界条件if (node.left != null && node.left.left == null && node.left.right == null) {// 若左子节点不为空 且左子节点为叶子节点ans += node.left.val; // 对左叶子求和}pre(node.left); // 遍历 左pre(node.right); // 遍历 右}
}
提交结果如下:
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:40.4 MB,击败了9.75% 的Java用户
复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n),对二叉树进行遍历
- 空间复杂度: O ( n ) O(n) O(n),递归的空间消耗与递归的层数有关。
这篇关于LC 404.左叶子之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!