c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。
目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。
初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 404. 左叶子之和(Sum of Left Leaves)
问题描述:
计算给定二叉树的所有左叶子之和。
示例:
C语言实现:
我们知道求所有叶子节点的方法,是递归的将左右子树的叶子节点值相加。
这道题只是在此基础上增加了一个条件而已,即需要加一个判断以确定一个叶子节点是否是左叶子节点。
这里我们有两种方法。
第一种方法:
直接判断是否是左叶子节点,如果是,那么返回它的值与右边兄弟节点递归的结果的和,因为它的兄弟节点不一定是叶子节点,所以还要递归。
如果某节点的左右节点都不是叶子节点,那么就返回其左右节点递归的和,这个很容易理解。
代码如下:
第二种方法:
这需要定义一个新的递归函数,使得在遍历的时候标记接下来的节点是否是左节点。
如果下面要遍历的节点是当前节点的左节点,那么除了将左节点传递给新函数外,还有传递一个true值给新函数,以标记这是一个左节点,同样的,如果是右节点,传递右节点和一个false给新函数。那么新函数在做处理的时候,首先看传过来的参数,如果标记这是一个左节点,那么返回它的值。否则继续递归该节点的子节点并返回他们的和。
代码如下:
从代码来看这两种实现都很类似,但是原理是有些不同的。
他们的算法复杂度是相同的,性能上的表现也基本一致。
python语言的实现:
python的实现用的是第一种方式,第二种方式,读者自行尝试。
代码如下:
Java语言的实现:
Java 的实现用的是第一种方式,第二种方式,读者自行尝试。
代码如下:
c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...相关推荐
- python实现二分查找算法_两种方法实现Python二分查找算法
一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print(" ...
- c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数
二叉树的最小深度 题目:给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20 ...
- java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。
展开全部 叶子节点:没有孩子节点的节点 也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把 ...
- 【知识学习】C# List<T>取并集并去重的两种方法时间消耗比较
C# List<T>取并集并去重的两种方法时间消耗比较 文章目录 C# List\取并集并去重的两种方法时间消耗比较 前言 一.两种方法 二.时间计算方法 1.Stopwatch 三.数据 ...
- 烽火HG680-KB_Hi3798MV310_当贝桌面_强刷及免拆_两种方法-卡刷固件包
烽火HG680-KB_Hi3798MV310_当贝桌面_强刷及免拆_两种方法-卡刷固件包-内有短接点及教程 特点: 1.适用于对应型号的电视盒子刷机: 2.开放原厂固件屏蔽的市场安装和u盘安装apk: ...
- a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)
串的两种模式匹配方式(BF/KMP算法) 前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最 ...
- c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...
第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...
- lcd取模如何取16位_两种方式实现取16位变量的高低8位, 不严谨对比
程序如下,第一种方式是强制指针转换,再取结构体成员:第二种方式是简单的移位.前面这种写法得考虑大小端序, 后者不用管. #include <stdio.h>#define hi8(x) ( ...
- 取pi的前8位的解压密码_两种方式实现取16位变量的高低8位, 不严谨对比
程序如下,第一种方式是强制指针转换,再取结构体成员:第二种方式是简单的移位.前面这种写法得考虑大小端序, 后者不用管. #include <stdio.h>#define hi8(x) ( ...
最新文章
- 手把手带你撸一个cli工具
- HTTP文件下载原理(OTA 下载 断点续传)
- 20170930-构建之法:现代软件工程-阅读笔记
- 非线性回归模型(part2)--支持向量机
- PHP的安装与设置——windos
- Cortex-M3操作模式和特权级别
- linux 套接口文件_继上一篇,继续介绍linux 套接口
- python 抓取百度音乐
- Linux服务器安全登录设置
- 还挺好看!用命令行画思维导图;66天机器学习之旅;斯坦福CS234 强化学习课程;哈佛CS50 计算机科学导论课程;前沿论文 | ShowMeAI资讯日报
- JAVA----Quartz SimpleTrigger和CronTrigger 触发器
- 服务器装usb无线网卡,小巧便携的USB无线网卡,让台式电脑实现wifi自由
- 微信记账小程序(附源码),你值得拥有!
- 文字烫金效果html,一种浮雕烫金效果的收缩套标的制作方法
- Android 视频播放 界面变形处理
- java程序设计高级教程答案_Java高级程序设计实战教程答案
- 关于协作与个人英雄主义
- 信息学奥赛一本通:1183:病人排队
- 自动驾驶决策——决策基本概念
- 《程序员十二时辰》,居然是这样的!内容过于真实 ...
热门文章
- SQL分页查询方案的性能对比
- 云数据库精华问答 | 现有数据库优化到云环境有什么好处​?
- kubernetes精华问答 | Swarm和K8S的共同点有哪些?
- 乐佰小迪智能机器人_云知声 AI 陪伴教育机器人方案亮相广州国际玩具展
- 计算机教师资格考试试题,全国教师资格考试信息技术练习题(二)
- python大列表分割成小列表_Python有什么方法将列表分割成大小均匀的块?求使用实例...
- canvas全局合成画月牙_GIF动态图,视频?都能用Python转换成字符画图像
- geth 转账_eth客户端安装 geth使用 批量转账(一)
- java static 块 时机_java的static块执行时机
- 正则表达式简单语法及常用正则表达式