LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)
题目描述
给定一个二叉树,返回它的前序遍历。
思路
详见链接
代码
递归法
#class TreeNode:
# def __init__(self,x):
# self.val = x
# self.left = None
# self.right = None
class Solution:def preorderTraversal(self,root:TreeNode) -> List[int]:res = []def helper(root):if not root:return res.append(root.val)helper(root.left)helper(root.right)helper(root)return res
迭代法
#class TreeNode:
# def __init__(self,x):
# self.val = x
# self.left = None
# self.right = None
class Solution:def preorderTraversal(self,root:TreeNode) -> List[int]:res = []if not root:return resstack = [root]while stack:node = stack.pop()res.append(node.val)if node.right:stack.append(node.right) #满足栈的后进先出原则if node.left:stack.append(node.left)return res
颜色标记法
class TreeNode:def __init__(self,x):self.val = xself.left = Noneself.right = None
class Solution:def preorderTraversal(self,root:TreeNode):res = []WHITE , GRAY = 0 , 1stack = [(WHITE,root)]while stack:color , node = stack.pop()if node:if color == WHITE:stack.append((WHITE,node.right))stack.append((WHITE,node.left))stack.append((GRAY,node))else:res.append(node.val)return resdef stringToTreeNode(input):input = input.strip()input = input[1:-1]if not input:return NoneinputValues = [s.strip() for s in input.split(',')]root = TreeNode(int(inputValues[0]))nodeQueue = [root]front = 0index = 1while index < len(inputValues):node = nodeQueue[front]front = front + 1item = inputValues[index]index = index + 1if item != "null":leftNumber = int(item)node.left = TreeNode(leftNumber)nodeQueue.append(node.left)if index >= len(inputValues):breakitem = inputValues[index]index = index + 1if item != "null":rightNumber = int(item)node.right = TreeNode(rightNumber)nodeQueue.append(node.right)return rootlist = input("输入:")
b = stringToTreeNode(list)
test = Solution()
test.preorderTraversal(b)
效果
LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)相关推荐
- [leetcode] 144. 二叉树的前序遍历
144. 二叉树的前序遍历 递归写法 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List ...
- Leetcode题库 144.二叉树的前序遍历(递归 C实现)
文章目录 解析 代码 解析 前序遍历:先中再左后右 Func函数,接收一个节点,节点非空,则存入val值,并分别遍历其左右子树 ret数组存储每个非空节点的val值 pos为下一个存入ret数组的数据 ...
- LeetCode 144. 二叉树的前序遍历(前序遍历)
文章目录 1. 题目信息 2. 解题 2.1 递归 2.2 循环,必须掌握 1. 题目信息 给定一个二叉树,返回它的 前序 遍历. 示例:输入: [1,null,2,3] 1\2/3 输出: [1,2 ...
- [leetcode] 144.二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出:[] 示例 3 ...
- Leetcode 144. 二叉树的前序遍历 (每日一题 20210820)
给你二叉树的根节点 root ,返回它节点值的 前序 遍历.示例 1:输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2:输入:root = [] 输出:[] 示例 3:输入 ...
- Leetcode 144. 二叉树的前序遍历 解题思路及C++实现
解题思路: 这道题目的解题思路与中序遍历一模一样,区别只在于输出结果放在push进栈之前. 程序的大循环是遍历整个树,所以循环停止条件是:栈为空,且当前访问节点root为NULL,这时说明所有的跟节点 ...
- LeetCode 102. 二叉树的层次遍历(递归)(迭代)
题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 思路 详见链接 代码 递归 #class TreeNode: # def __init__(self,x): ...
- leetcode144. 二叉树的前序遍历(递归+迭代)
一:题目 二:上码 1:递归 class Solution {public:void preorder(TreeNode* root,vector<int>&v ) {if(roo ...
- LeetCode 144 ——二叉树的前序遍历
1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 将当前节点的数值加入到 data 中 递归得到其左子树的数据向量 temp,将 te ...
最新文章
- MongoDB 日志切换(Rotate Log Files)实战
- 智能车竞赛技术报告 | 智能车视觉 - 扬州大学 - 这辆盲车不吃水果
- 微信链接非80端口问题解决方案(伪处理)
- zanePerfor 一款完整,高性能,高可用的前端性能监控系统,不要错过
- 风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络
- 软件开发中团队能力的培养
- 封装一个帮助类来写文件到android外置存储器上
- 6个工具让网页抓取变得轻而易举
- Meego的N9发布
- 计算机财会属于经济管理类吗,哪些专业可以考公务员
- 呼吸机吸气触发:压力触发与流量触发
- Excel怎么将不规律的英文字母提取出来
- Eslint+Prettier 实现代码 git 提交时自动格式化及修复
- 【运筹学】整数规划 ( 相关概念 | 整数规划 | 整数线性规划 | 整数线性规划分类 )
- 【周赛-简单】5495. 圆形赛道上经过次数最多的扇区
- 改了dns服务器有没有影响,dns改成114有危险吗_dns改了有什么影响
- 超强的学习能力是怎样练就的~
- 使用XXLjob中间件进行定时任务的管理
- java实现floyd统计天津地铁的网站距离
- 初等数论重要公式总结
热门文章
- 计算机打开管理工具空白,大师解决win10系统打开设备管理器却显示空白的办法...
- shell命令行快捷键
- C++ Primer(第5版)
- python改变日期的输出格式,关于python:解析日期字符串并更改格式
- Redis和Memcached在功能、性能以及内存使用效率上的对比
- android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
- 你知道关闭页面时怎么向后台发送消息吗?
- 黑客都是使用哪些方法入侵我们电脑的
- idea 如何关闭 field injection is not recommended 警告
- 一张图读懂MVC设计模式,从用户发起请求到获取响应,应用内部到底是如何数据流转、业务串联的