刻意练习:LeetCode实战 -- 二叉树的后序遍历
背景
今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历、中序遍历、后序遍历以及层次遍历,而LeetCode也有二叉树的后序遍历题目,故一起写了。
题目
- 题号:145
- 难度:困难
- https://leetcode-cn.com/problems/binary-tree-postorder-traversal/
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3] 1\2/3 输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
实现
第一种:利用栈
前序遍历顺序为:根 -> 左 -> 右
后序遍历顺序为:左 -> 右 -> 根
如果1:我们将前序遍历中节点插入结果链表尾部的逻辑,修改为将节点插入结果链表的头部
那么结果链表就变为了:右 -> 左 -> 根
如果2:我们将遍历的顺序由从左到右修改为从右到左,配合如果1
那么结果链表就变为了:左 -> 右 -> 根
这刚好是后序遍历的顺序
基于这两个思路,我们处理方式如下:
第一:修改前序遍历代码中,节点写入结果链表的代码,将插入队尾修改为插入队首
第二:修改前序遍历代码中,每次先查看左节点再查看右节点的逻辑,变为先查看右节点再查看左节点
- 执行结果:通过
- 执行用时:272 ms, 在所有 C# 提交中击败了 98.15% 的用户
- 内存消耗:30 MB, 在所有 C# 提交中击败了 6.90% 的用户
/*** Definition for a binary tree node.* public class TreeNode {* public int val;* public TreeNode left;* public TreeNode right;* public TreeNode(int x) { val = x; }* }*/
public class Solution
{public IList<int> PostorderTraversal(TreeNode root){IList<int> lst = new List<int>();Stack<TreeNode> stack = new Stack<TreeNode>();while (stack.Count != 0 || root != null){if (root != null){stack.Push(root);lst.Insert(0, root.val);root = root.right;}else{TreeNode node = stack.Pop();root = node.left;}}return lst;}
}
第二种:利用递归
- 执行结果:通过
- 执行用时:276 ms, 在所有 C# 提交中击败了 89.81% 的用户
- 内存消耗:30 MB, 在所有 C# 提交中击败了 6.90% 的用户
/*** Definition for a binary tree node.* public class TreeNode {* public int val;* public TreeNode left;* public TreeNode right;* public TreeNode(int x) { val = x; }* }*/
public class Solution
{public IList<int> PostorderTraversal(TreeNode root){IList<int> lst = new List<int>();PostOrder(root, lst);return lst;}private void PostOrder(TreeNode node, IList<int> lst){if (node == null)return;PostOrder(node.left, lst);PostOrder(node.right, lst);lst.Add(node.val);}
}
Python 语言
- 执行结果:通过
- 执行用时:28 ms, 在所有 Python3 提交中击败了 93.45% 的用户
- 内存消耗:13.6 MB, 在所有 Python3 提交中击败了 5.09% 的用户
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:lst = list()self.postOrder(root, lst)return lstdef postOrder(self, node: TreeNode, lst: list):if node is None:returnself.postOrder(node.left, lst)self.postOrder(node.right, lst)lst.append(node.val)
往期活动
LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!
- Python基础刻意练习活动即将开启,你参加吗?
- Task01:变量、运算符与数据类型
- Task02:条件与循环
- Task03:列表与元组
- Task04:字符串与序列
- Task05:函数与Lambda表达式
- Task06:字典与集合
- Task07:文件与文件系统
- Task08:异常处理
- Task09:else 与 with 语句
- Task10:类与对象
- Task11:魔法方法
- Task12:模块
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:
相关文章:

数据库加锁(转)
1 如何锁一个表的某一行 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM table ROWLOCK WHERE id 1 2 锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 加锁语句: sybase: update 表 set col1col1 where 10 ; MSSQL: select col1 from …

学好web前端开发要注意哪些问题
web前端学起来是比较困难的,当然想要学好web前端技术,那么有一些注意事项一定是要看的,下面小编就为大家详细的介绍一下学好web前端开发要注意哪些问题? 学好web前端开发要注意哪些问题? 基础:无论做什么都一定要有扎实的…

Android include 标签
android中include标签是为了便于控件的覆用的一个很好解决方案。 但是也有一些需要注意的地方,下面是本人在项目中碰到过的一个问题,做此记录,便于以后查看。 include标签用法。 1.新建一个xml文件,命名 head.xml head.xml文件内容…

刻意练习:LeetCode实战 -- 不同的二叉搜索树
背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是“不同的二叉搜索树 II”,而LeetCode也有“不同的二叉搜索树”题目,故一起写了。 题目 题号:96难度:中等https://leetcode-cn.…

15. Python 函数
1. 函数的写法,函数的调用【函数的一般形式】定义一个函数要有以下规则:(1)函数代码块以 def 关键词开头,后接函数标识符名称和小括号();(2)任何传入参数和自…

Java培训找什么样的机构比较好
Java培训找什么样的机构比较好?很多人都比较关注java技术,想要学习java技术,参加相关工作,但如今市面上的java培训机构那么多,怎么样选择比较靠谱呢?来看看下面的详细介绍吧。 Java培训找什么样的机构比较好?小编这里…

刻意练习:LeetCode实战 -- Task23. 不同的二叉搜索树 II
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

windows phone 越狱教程:利用学生帐号解锁并部署软件教程(图文并茂)
之前老是看到有学生帐号可以越狱,但一直以来都觉得比较复杂,不想下手.近日,TX微信出来了,很多人都想装,可是装不了,所以下决心研究一下学生帐号越狱.网上看教程,发现很多都是不全面,有些只有一半,最后还是决定按我自己申请学生帐号时的流程写一个教程,希望对大家有所帮助. 学生…

基于web创建逼真的3D图形 | CSS技巧
在成为一名web开发者之前,我从事于视觉设计行业,创造屡获殊荣,电影和电视节目等高端3D效果,例如 Tron, The Thing, Resident Evil,和 Vikings 。为了能够创造这些效果,我们需要使用高度复杂的动画软件,例如…

jQuery元素内容操作的方法有多少种?
jQuery中操作元素内容的方法,主要包括html()方法、text()方法和val()方法。html()方法用于获取或设置元素的HTML内容,text()方法用于获取或设置元素的文本内容,val()方法用来获取或设置表单元素的value值。具体使用说明如表1所示。 表1 元素内…

获取SQLServer数据库中所有表
对于获取SQLSERVER数据库中所有表,首先第一步引有SQLDMO.dll 找到文件路径: C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQLDMO.dll 找到SQLDOM.DLL //在后台写方法 using System;using System.Collections.Generic;using System.Linq;using Syst…

刻意练习:LeetCode实战 -- Task24. 恢复二叉搜索树
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

Solaris下ftp配置(初稿-待补充)
1.自带ftp版本 Version wu-2.6.2 2.ftp启动与停止 启动并启用ftp: svcadm enable network/ftp 停止并禁用ftp: svcadm disable network/ftp 3.使某个系统用户无法使用ftp或者恢复使用ftp vi /etc/ftpd/ftpusers 向其中添加要禁止使用ftp的…

女生参加web前端培训可以吗
近几年,web前端被视为互联网行业最热门编程语言技术之一,越来越多的人开始想要学习web前端技术,其中不乏有一些女性学习,那么很多人就要问了,女生参加web前端培训可以吗?我们来看看下面的详细介绍吧。 女生参…

春节期间停止更新
非常抱歉地跟各位说一下,因为老家并没有拉宽带,所以春节期间无法进行更新。虽然说我可以背着笔记本回家,然后再到朋友处蹭一下网络。但想到一年365天,能回家的就那么几天,只是想好好陪陪父母,伴伴自己的老婆…

刻意练习:LeetCode实战 -- Task26.判断子序列
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

spring @component的作用
转自:https://www.cnblogs.com/lyjing/p/8427832.html1、controller 控制器(注入服务) 2、service 服务(注入dao) 3、repository dao(实现dao访问) 4、component (把普通pojo实例化到…

使用JavaScript变量需要注意哪些语法细节?
使用JavaScript变量需要注意哪些语法细节?JavaScript在很多地方经常会涉及到,尤其是JavaScript变量这方面,在使用变量时,还有一些值得注意的语法细节,下面进行详细讲解。 使用JavaScript变量需要注意哪些语法细节? 1. 更新变量的…
手把手教你搭建一个学习Python好看的 Jupyter 环境
又到摆脱重复工作,换个心情,然而并没有软用的时间了。这次,教大家如何搭建一个好看的jupyter环境。安装Jupyter先来展示一下我的环境python: 3.5.*macos: 10.12.4安装Jupyter的过程只需安装Anaconda即可。测试一下初始设置:jupyte…

刻意练习:LeetCode实战 -- Task27.分发饼干
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

祝贺《WCF邮件通信系统》在高阳市场研究汇编第五期发表
上次给公司的市场研究汇编投稿,只写了一个PPT格式的《WCF邮件通信系统》,编辑把它整理成了PDF格式的内容,感觉很好,所以我把PDF原文中的有关内容存储成了图片,发表在这里,庆贺一下。PDF原文地址:…

学软件测试有前途吗
学软件测试有前途吗?很多人都关心这个问题,最近几年,软件测试这个行业在很多企业都是非常刚需的,随着互联网的飞快发展,IT行业出现日新月异的变化,企业的大量需求,人才的严重匮乏,导致IT行业&a…

Active Directory 账号迁移配置介绍
首先介绍一下环境: 生产域环境: example.cn 测试域环境: fengdian.info 系统平台: 2K08 R2 林、域功能级别:Windows Server 2008 要求: 测试域环境“fengdian.info”同步生产域环境所有用户账号,实现测试环境和生产环境的基本统 一,方便功能测…

VIM命令快速记忆(转自杰哥)
因为自己也是个linuxer 熟练运用VIM是必须的,恰好学长杰哥对此有研究, 转来给大家分享。对此表达对杰哥的敬意。 有好东西分享给大家才能相互学习是吧。 要做个Linuxer,VIM的操作是必须就跟手指头盲打键盘那么熟练。 首先说下Vim的两种最常用…

刻意练习:LeetCode实战 -- Task28.跳跃游戏
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

类操作是什么意思?jQuery的类操作教程
类操作就是通过操作元素的类名进行元素样式操作,当元素样式比较复杂时,如果通过css()方法实现,需要在CSS里编写很长的代码,既不美观也不方便。而通过写一个类名,把类名加上或去掉就会显得很方便。下面通过代码演示类的…

刻意练习:LeetCode实战 -- Task29. 加油站
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

C#从SQL server数据库中读取l图片和存入图片
一、从图片中获得二进制值的基本方法:Image.Save 方法 (String, ImageFormat) 这会将保存 Image 写入指定的文件中指定的格式。 命名空间: System.Drawing 程序集: System.Drawing(位于 System.Drawing.dll) 语法: public void S…

linux下查看内存使用情况
在Linux下查看内存我们一般用free命令:[rootscs-2 tmp]# free total used free shared buffers cachedMem: 3266180 3250004 16176 0 110652 2668236-/ buffers/cache: 471116 2795064Swa…

现在转行学习UI设计好不好就业
UI设计是很多企业都会有需求的一个岗位,对于现在转行学习UI设计好不好就业这个问题,小编的回答是肯定的,最直接的方法就是上招聘信息,如果说招聘网站上UI设计师职位很少,那就说明UI设计行业已经差不多饱和了。 …