技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。

目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我

我会持续分享下去,敬请您的关注。

LeetCode 404. 左叶子之和(Sum of Left Leaves)

问题描述:

计算给定二叉树的所有左叶子之和。

示例:

C语言实现:

我们知道求所有叶子节点的方法,是递归的将左右子树的叶子节点值相加。

这道题只是在此基础上增加了一个条件而已,即需要加一个判断以确定一个叶子节点是否是左叶子节点。

这里我们有两种方法。

第一种方法:

直接判断是否是左叶子节点,如果是,那么返回它的值与右边兄弟节点递归的结果的和,因为它的兄弟节点不一定是叶子节点,所以还要递归。

如果某节点的左右节点都不是叶子节点,那么就返回其左右节点递归的和,这个很容易理解。

代码如下:

第二种方法:

这需要定义一个新的递归函数,使得在遍历的时候标记接下来的节点是否是左节点。

如果下面要遍历的节点是当前节点的左节点,那么除了将左节点传递给新函数外,还有传递一个true值给新函数,以标记这是一个左节点,同样的,如果是右节点,传递右节点和一个false给新函数。那么新函数在做处理的时候,首先看传过来的参数,如果标记这是一个左节点,那么返回它的值。否则继续递归该节点的子节点并返回他们的和。

代码如下:

从代码来看这两种实现都很类似,但是原理是有些不同的。

他们的算法复杂度是相同的,性能上的表现也基本一致。

python语言的实现:

python的实现用的是第一种方式,第二种方式,读者自行尝试。

代码如下:

Java语言的实现:

Java 的实现用的是第一种方式,第二种方式,读者自行尝试。

代码如下:

c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...相关推荐

  1. python实现二分查找算法_两种方法实现Python二分查找算法

    一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print(" ...

  2. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数

    二叉树的最小深度 题目:给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20 ...

  3. java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。

    展开全部 叶子节点:没有孩子节点的节点 也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把 ...

  4. 【知识学习】C# List<T>取并集并去重的两种方法时间消耗比较

    C# List<T>取并集并去重的两种方法时间消耗比较 文章目录 C# List\取并集并去重的两种方法时间消耗比较 前言 一.两种方法 二.时间计算方法 1.Stopwatch 三.数据 ...

  5. 烽火HG680-KB_Hi3798MV310_当贝桌面_强刷及免拆_两种方法-卡刷固件包

    烽火HG680-KB_Hi3798MV310_当贝桌面_强刷及免拆_两种方法-卡刷固件包-内有短接点及教程 特点: 1.适用于对应型号的电视盒子刷机: 2.开放原厂固件屏蔽的市场安装和u盘安装apk: ...

  6. a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)

    串的两种模式匹配方式(BF/KMP算法) 前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最 ...

  7. c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...

    第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...

  8. lcd取模如何取16位_两种方式实现取16位变量的高低8位, 不严谨对比

    程序如下,第一种方式是强制指针转换,再取结构体成员:第二种方式是简单的移位.前面这种写法得考虑大小端序, 后者不用管. #include <stdio.h>#define hi8(x) ( ...

  9. 取pi的前8位的解压密码_两种方式实现取16位变量的高低8位, 不严谨对比

    程序如下,第一种方式是强制指针转换,再取结构体成员:第二种方式是简单的移位.前面这种写法得考虑大小端序, 后者不用管. #include <stdio.h>#define hi8(x) ( ...

最新文章

  1. 手把手带你撸一个cli工具
  2. HTTP文件下载原理(OTA 下载 断点续传)
  3. 20170930-构建之法:现代软件工程-阅读笔记
  4. 非线性回归模型(part2)--支持向量机
  5. PHP的安装与设置——windos
  6. Cortex-M3操作模式和特权级别
  7. linux 套接口文件_继上一篇,继续介绍linux 套接口
  8. python 抓取百度音乐
  9. Linux服务器安全登录设置
  10. 还挺好看!用命令行画思维导图;66天机器学习之旅;斯坦福CS234 强化学习课程;哈佛CS50 计算机科学导论课程;前沿论文 | ShowMeAI资讯日报
  11. JAVA----Quartz SimpleTrigger和CronTrigger 触发器
  12. 服务器装usb无线网卡,小巧便携的USB无线网卡,让台式电脑实现wifi自由
  13. 微信记账小程序(附源码),你值得拥有!
  14. 文字烫金效果html,一种浮雕烫金效果的收缩套标的制作方法
  15. Android 视频播放 界面变形处理
  16. java程序设计高级教程答案_Java高级程序设计实战教程答案
  17. 关于协作与个人英雄主义
  18. 信息学奥赛一本通:1183:病人排队
  19. 自动驾驶决策——决策基本概念
  20. 《程序员十二时辰》,居然是这样的!内容过于真实 ...

热门文章

  1. SQL分页查询方案的性能对比
  2. 云数据库精华问答 | 现有数据库优化到云环境有什么好处​?
  3. kubernetes精华问答 | Swarm和K8S的共同点有哪些?
  4. 乐佰小迪智能机器人_云知声 AI 陪伴教育机器人方案亮相广州国际玩具展
  5. 计算机教师资格考试试题,全国教师资格考试信息技术练习题(二)
  6. python大列表分割成小列表_Python有什么方法将列表分割成大小均匀的块?求使用实例...
  7. canvas全局合成画月牙_GIF动态图,视频?都能用Python转换成字符画图像
  8. geth 转账_eth客户端安装 geth使用 批量转账(一)
  9. java static 块 时机_java的static块执行时机
  10. 正则表达式简单语法及常用正则表达式