题目描述

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

思路

详见链接

代码

递归法

#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. 二叉树的前序遍历(递归)(迭代)(颜色标记法)相关推荐

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

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

  2. Leetcode题库 144.二叉树的前序遍历(递归 C实现)

    文章目录 解析 代码 解析 前序遍历:先中再左后右 Func函数,接收一个节点,节点非空,则存入val值,并分别遍历其左右子树 ret数组存储每个非空节点的val值 pos为下一个存入ret数组的数据 ...

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

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

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

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

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

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

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

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

  7. LeetCode 102. 二叉树的层次遍历(递归)(迭代)

    题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 思路 详见链接 代码 递归 #class TreeNode: # def __init__(self,x): ...

  8. leetcode144. 二叉树的前序遍历(递归+迭代)

    一:题目 二:上码 1:递归 class Solution {public:void preorder(TreeNode* root,vector<int>&v ) {if(roo ...

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

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

最新文章

  1. MongoDB 日志切换(Rotate Log Files)实战
  2. 智能车竞赛技术报告 | 智能车视觉 - 扬州大学 - 这辆盲车不吃水果
  3. 微信链接非80端口问题解决方案(伪处理)
  4. zanePerfor 一款完整,高性能,高可用的前端性能监控系统,不要错过
  5. 风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络
  6. 软件开发中团队能力的培养
  7. 封装一个帮助类来写文件到android外置存储器上
  8. 6个工具让网页抓取变得轻而易举
  9. Meego的N9发布
  10. 计算机财会属于经济管理类吗,哪些专业可以考公务员
  11. 呼吸机吸气触发:压力触发与流量触发
  12. Excel怎么将不规律的英文字母提取出来
  13. Eslint+Prettier 实现代码 git 提交时自动格式化及修复
  14. 【运筹学】整数规划 ( 相关概念 | 整数规划 | 整数线性规划 | 整数线性规划分类 )
  15. 【周赛-简单】5495. 圆形赛道上经过次数最多的扇区
  16. 改了dns服务器有没有影响,dns改成114有危险吗_dns改了有什么影响
  17. 超强的学习能力是怎样练就的~
  18. 使用XXLjob中间件进行定时任务的管理
  19. java实现floyd统计天津地铁的网站距离
  20. 初等数论重要公式总结

热门文章

  1. 计算机打开管理工具空白,大师解决win10系统打开设备管理器却显示空白的办法...
  2. shell命令行快捷键
  3. C++ Primer(第5版)
  4. python改变日期的输出格式,关于python:解析日期字符串并更改格式
  5. Redis和Memcached在功能、性能以及内存使用效率上的对比
  6. android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
  7. 你知道关闭页面时怎么向后台发送消息吗?
  8. 黑客都是使用哪些方法入侵我们电脑的
  9. idea 如何关闭 field injection is not recommended 警告
  10. 一张图读懂MVC设计模式,从用户发起请求到获取响应,应用内部到底是如何数据流转、业务串联的