leecode404——左叶子之和

这篇具有很好参考价值的文章主要介绍了leecode404——左叶子之和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🔍左叶子的定义:

首先要注意,是左叶子之和,而不是左侧节点之和。那么明确说,左叶子就是节点A的左孩子不为空,且左孩子的左节点为空 并且左孩子的右节点为空,那么A的左孩子为左叶子节点。

1.如果使用递归法,则搬出递归三部曲:

🟣(1)确定函数参数和返回值

判断一棵树的左叶子节点和,那么传入的是树的根节点,函数返回的是根节点之和,因此返回类型为int类型。

🟣(2)确定终止条件

若根节点为空,则返回0。注意,只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。 所以如果当前遍历的节点是叶子节点,那其左叶子也必定是0,

🟣(3)确定单层递归逻辑

当遇到左叶子的时候记录数值,递归求解左叶子之和,和右子树的左叶子节点之和。文章来源地址https://www.toymoban.com/news/detail-445430.html

2.使用迭代法

🟣(1)首先判空,若根节点为空,则返回0;
🟣(2)定义一个空栈,用于存储当前节点;当当前节点不为空时,将根节点压入栈中。定义一个res变量,计算当前左叶子节点的值。
🟣(3)开始循环,当栈不为空时,先取出当前节点,判断当前节点的左孩子是否为空,只有左孩子不为空并且左孩子的左右节点都为空时才能成为左叶子节点,若是左叶子,则将其计算加入res中。即
if(node.left!=null&&node.left.left==null&&node.left.right==null){
	res+=node.left.val;
}
🟣(4)当不是左叶子节点时,继续往下遍历,判断该节点的左右节点是否为空,不为空加入栈中,弹出该节点,判断下一个节点的(3)步骤,直到到达左右叶子节点,跳出村换返回结果。
if (node.right != null) stack.add(node.right);
if (node.left != null) stack.add(node.left);

完整代码如下;

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) return 0;
        Stack<TreeNode> stack = new Stack<> ();
        stack.add(root);
        int result = 0;
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node.left != null && node.left.left == null && node.left.right == null) {
                result += node.left.val;
            }
            if (node.right != null) stack.add(node.right);
            if (node.left != null) stack.add(node.left);
        }
        return result;
    }
}

到了这里,关于leecode404——左叶子之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法专题--双指针算法】leecode-15.三数之和(medium)、leecode-18. 四数之和(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年04月09日
    浏览(38)
  • Leetcode129. 求根到叶子节点数字之和

    力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二叉树的根节点  root  ,树中每个节点都存放有一个  0  到  9  之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶子节点的路径  1 - 2 - 3  表示数字  123  。 计算从根节点到叶节

    2024年02月09日
    浏览(25)
  • 算法刷题Day 17 平衡二叉树+二叉树的所有路径+左叶子之和

    计算左右两棵子树的高度,如果有一个高度是-1(有一棵子树不平衡),直接返回-1,否则计算高度差,判断是否不平衡 使用 回溯 的方法,每次处理一个节点之前要把它push进table里,处理完之后又要把它pop出来 处理一个节点时,要判断它是否是左节点(需要父节点,可以通

    2024年02月15日
    浏览(31)
  • 【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年03月23日
    浏览(30)
  • 二叉树叶子结点个数统计

    1.问题描述: 输入一棵二叉树,求出其叶子结点个数。 2.实验要求: (1)设计二叉树的二叉链表存储结构 (2)设计求叶子结点个数的递归算法 (3)输入一棵二叉树 (4)输出二叉树的叶子节点个数 示例: ab#c##d## 二叉树叶子结点个数为: 3.程序实现: (1)代码: (2)算法

    2024年02月01日
    浏览(25)
  • leetcode872. 叶子相似的树(java)

    难度 - 简单 leetcode - 872. 叶子相似的树 请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。 如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。 如

    2024年02月09日
    浏览(28)
  • 每日一练:LeeCode-面试题 02.07. 链表相交 【链表+迭代】 LeeCode-142. 环形链表 II【链表+集合】

    本文是力扣 每日一练:每日一练:LeeCode-面试题 02.07. 链表相交 【链表+迭代】 LeeCode-142. 环形链表 II【链表+集合】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐 LeeCode-面试题 02.07. 链表相交LeeCode-面试题 02.07. 链表相交 与 LeeCode-142. 环形链表 II 给

    2024年03月17日
    浏览(34)
  • leecode

    leecode202,快乐数, 环形链表法,带循环的规律都可以考虑用环形链表 leecode258,各位相加,数根,找数学规律

    2024年02月08日
    浏览(21)
  • leecode-二分查找

    题目链接 大家都知道二分查找其实有很多种写法,这里一个比较巧妙地点就是,这个写法可以在返回插入位置的时候直接返回 i ,不用进行处理。 那么为什么这种写法可以呢? 我们来分析一下,首先我们的写法是: 当target不等于nums[mid]时,我们选择了i=mid+1,j=mid-1 while循环结

    2024年02月11日
    浏览(30)
  • leecode-全排列

    题目链接 两个函数知识点: next_permutation(start,end); 输出所有比当前排列 排列大的排列 prev_permutation(start,end); 输出所有比当前排列 排列小的排列

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包