刻意练习:LeetCode实战 -- 二叉树的前序遍历
背景
今天,第二期基础算法(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实战 -- 二叉树的前序遍历相关推荐
- [leetcode] 144. 二叉树的前序遍历
144. 二叉树的前序遍历 递归写法 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List ...
- LeetCode 144. 二叉树的前序遍历(前序遍历)
文章目录 1. 题目信息 2. 解题 2.1 递归 2.2 循环,必须掌握 1. 题目信息 给定一个二叉树,返回它的 前序 遍历. 示例:输入: [1,null,2,3] 1\2/3 输出: [1,2 ...
- Leetcode 144. 二叉树的前序遍历 (每日一题 20210820)
给你二叉树的根节点 root ,返回它节点值的 前序 遍历.示例 1:输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2:输入:root = [] 输出:[] 示例 3:输入 ...
- [leetcode] 144.二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出:[] 示例 3 ...
- LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)
题目描述 给定一个二叉树,返回它的前序遍历. 思路 详见链接 代码 递归法 #class TreeNode: # def __init__(self,x): # self.val = x # self ...
- Leetcode 144. 二叉树的前序遍历 解题思路及C++实现
解题思路: 这道题目的解题思路与中序遍历一模一样,区别只在于输出结果放在push进栈之前. 程序的大循环是遍历整个树,所以循环停止条件是:栈为空,且当前访问节点root为NULL,这时说明所有的跟节点 ...
- LeetCode 144 ——二叉树的前序遍历
1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 将当前节点的数值加入到 data 中 递归得到其左子树的数据向量 temp,将 te ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
- LeetCode:144_Binary Tree Preorder Traversal | 二叉树的前序遍历 | Medium
题目:Binary Tree Preorder Traversal 二叉树的前序遍历,同样使用栈来解,代码如下: 1 struct TreeNode { 2 int val; 3 TreeNode* ...
最新文章
- 网络规划设计师考试命题模式持续在变 你变不变
- UTF-8 GBK 联系和区别
- JPA学习笔记2——JPA高级
- 标书中如何正确描述所用的统计学方法
- 动态规划——双11既可以薅羊毛还能花钱最少
- 计算机专业毕业设计中期考核表,研究生中期考核表导师评语
- 笔记本电脑风扇声音大怎么办_车子才开几年发动机就发出哒哒哒的声音怎么办?不一定是大问题_搜狐汽车...
- Ubuntu搭建DNS主从服务器
- Java学习之路 之 异常总结篇
- 魅族手机开机出现Android,魅族开不了机怎么办?如何解决?
- 电子书,世界名著,中国名著
- Air202掉坑日记(1)——烧录固件(AT版本)
- A Linux Kernel Miracle Tour - 启程
- Go语言log日志包详解及使用
- vue3+tsx 踩坑
- 重庆美食地图(绝对霸道)
- WPF 控件 (二、按钮)
- 【Linux】网络管理与相关应用
- 【攻防世界】easyphp
- 2012浙大计算机考研分数线,浙江大学2012年考研复试分数线公布