背景

今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历、中序遍历、后序遍历以及层次遍历,而LeetCode也有二叉树的前序遍历题目,故一起写了。


题目

  • 题号:144
  • 难度:中等
  • https://leetcode-cn.com/problems/binary-tree-preorder-traversal/

给定一个二叉树,返回它的 前序 遍历。

示例:

输入: [1,null,2,3]  1\2/3 输出: [1,2,3]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?


实现

第一种:利用栈

  • 执行结果:通过
  • 执行用时:276 ms, 在所有 C# 提交中击败了 84.15% 的用户
  • 内存消耗:29.9 MB, 在所有 C# 提交中击败了 5.00% 的用户
/*** 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> PreorderTraversal(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(lst.Count, root.val);root = root.left;}else{TreeNode node = stack.Pop();root = node.right;}}return lst;}
}

第二种:利用递归

  • 执行结果:通过
  • 执行用时:280 ms, 在所有 C# 提交中击败了 79.27% 的用户
  • 内存消耗:29.8 MB, 在所有 C# 提交中击败了 5.00% 的用户
/*** 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> PreorderTraversal(TreeNode root){IList<int> lst = new List<int>();PreOrder(root, lst);return lst;}private void PreOrder(TreeNode node, IList<int> lst){if (node == null)return;lst.Add(node.val);PreOrder(node.left, lst);PreOrder(node.right, lst);}
}

Python 语言

  • 执行结果:通过
  • 执行用时:36 ms, 在所有 Python3 提交中击败了 60.09% 的用户
  • 内存消耗:13.7 MB, 在所有 Python3 提交中击败了 5.01% 的用户
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:lst = list()self.preOrder(root, lst)return lstdef preOrder(self, node: TreeNode, lst: list):if node is None:returnlst.append(node.val)self.preOrder(node.left, lst)self.preOrder(node.right, lst)

往期活动

LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!

  • Python基础刻意练习活动即将开启,你参加吗?
  • Task01:变量、运算符与数据类型
  • Task02:条件与循环
  • Task03:列表与元组
  • Task04:字符串与序列
  • Task05:函数与Lambda表达式
  • Task06:字典与集合
  • Task07:文件与文件系统
  • Task08:异常处理
  • Task09:else 与 with 语句
  • Task10:类与对象
  • Task11:魔法方法
  • Task12:模块

我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。

愿我们一起学习,一起进步,相互陪伴,共同成长。

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:

刻意练习:LeetCode实战 -- 二叉树的前序遍历相关推荐

  1. [leetcode] 144. 二叉树的前序遍历

    144. 二叉树的前序遍历 递归写法 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List ...

  2. LeetCode 144. 二叉树的前序遍历(前序遍历)

    文章目录 1. 题目信息 2. 解题 2.1 递归 2.2 循环,必须掌握 1. 题目信息 给定一个二叉树,返回它的 前序 遍历. 示例:输入: [1,null,2,3] 1\2/3 输出: [1,2 ...

  3. Leetcode 144. 二叉树的前序遍历 (每日一题 20210820)

    给你二叉树的根节点 root ,返回它节点值的 前序 遍历.示例 1:输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2:输入:root = [] 输出:[] 示例 3:输入 ...

  4. [leetcode] 144.二叉树的前序遍历

    给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出:[] 示例 3 ...

  5. LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)

    题目描述 给定一个二叉树,返回它的前序遍历. 思路 详见链接 代码 递归法 #class TreeNode: # def __init__(self,x): # self.val = x # self ...

  6. Leetcode 144. 二叉树的前序遍历 解题思路及C++实现

    解题思路: 这道题目的解题思路与中序遍历一模一样,区别只在于输出结果放在push进栈之前. 程序的大循环是遍历整个树,所以循环停止条件是:栈为空,且当前访问节点root为NULL,这时说明所有的跟节点 ...

  7. LeetCode 144 ——二叉树的前序遍历

    1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 将当前节点的数值加入到 data 中 递归得到其左子树的数据向量 temp,将 te ...

  8. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  9. LeetCode:144_Binary Tree Preorder Traversal | 二叉树的前序遍历 | Medium

    题目:Binary Tree Preorder Traversal 二叉树的前序遍历,同样使用栈来解,代码如下: 1 struct TreeNode { 2 int val; 3 TreeNode* ...

最新文章

  1. 网络规划设计师考试命题模式持续在变   你变不变
  2. UTF-8 GBK 联系和区别
  3. JPA学习笔记2——JPA高级
  4. 标书中如何正确描述所用的统计学方法
  5. 动态规划——双11既可以薅羊毛还能花钱最少
  6. 计算机专业毕业设计中期考核表,研究生中期考核表导师评语
  7. 笔记本电脑风扇声音大怎么办_车子才开几年发动机就发出哒哒哒的声音怎么办?不一定是大问题_搜狐汽车...
  8. Ubuntu搭建DNS主从服务器
  9. Java学习之路 之 异常总结篇
  10. 魅族手机开机出现Android,魅族开不了机怎么办?如何解决?
  11. 电子书,世界名著,中国名著
  12. Air202掉坑日记(1)——烧录固件(AT版本)
  13. A Linux Kernel Miracle Tour - 启程
  14. Go语言log日志包详解及使用
  15. vue3+tsx 踩坑
  16. 重庆美食地图(绝对霸道)
  17. WPF 控件 (二、按钮)
  18. 【Linux】网络管理与相关应用
  19. 【攻防世界】easyphp
  20. 2012浙大计算机考研分数线,浙江大学2012年考研复试分数线公布

热门文章

  1. MySQL宽字节注入漏洞分析_宽字节注入
  2. 2021年UI设计培训机构哪个好
  3. 如何使用OWASP Dependency Check的命令行(CLI)模式进行依赖库安全漏洞扫描
  4. Ubuntu命令终端查看使用过的命令
  5. JQuery:JQuery 中的CSS()方法
  6. PHP下载/采集远程图片到本地
  7. HttpUnit学习笔记
  8. ReSharper 配置及用法
  9. Android获取内部和SDCard的存储空间
  10. Msql sql(优化三)