原地址:

https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/xian-xu-zhong-xu-hou-xu-de-fei-di-gui-ban-ben-by-l/

大概思路:对于二叉树中的任何一个节点而言,它都有两个角色需要扮演,一个是作为值存储的角色(角色1),另一个角色是作为它所带领的子树的一个代表(角色2)。而我们设置的bool变量,就是为了说明我当前拿到的这个节点,应该是以一个值存储的这种角色对待它(True),还是应该以一个子树的代表这种角色对待它(False),如果是前者,那么就简单的将其所存储的值打印出来,如果是后者,我们需要继续探索由它带领的子树。

# 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]:if not root:return []st=[(root,False)]res=[]while st:cur,vis=st.pop()if vis:res.append(cur.val)else:if cur.right:st.append((cur.right,False))if cur.left:st.append((cur.left,False))st.append((cur,True))return res

同样的,中序遍历:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def inorderTraversal(self, root: TreeNode) -> List[int]:if not root:return []st=[(root,False)]res=[]while st:cur,vis=st.pop()if vis:res.append(cur.val)else:if cur.right:st.append((cur.right,False))st.append((cur,True))if cur.left:st.append((cur.left,False))return res

后序遍历:

# 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]:if not root:return []st=[(root,False)]res=[]while st:cur,vis=st.pop()if vis:res.append(cur.val)else:st.append((cur,True))if cur.right:st.append((cur.right,False))if cur.left:st.append((cur.left,False))return res

python先序中序后序的非递归版本相关推荐

  1. 二叉树的前、中、后、层次非递归遍历(js)

    有如下二叉树  遍历: // 前序遍历, head-left-rightfunction HLR (tree) {const stack = [], res = []if (tree) stack.p ...

  2. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)

    python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...

  3. Algorithm Gossip (22) 中序式转后序式(前序式)

    前言 This Series aritcles are all based on the book <经典算法大全>; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行 ...

  4. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  5. 关于树的前序遍历,中序遍历,后序遍历的相互转化(含代码实现)

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们需要了解的是前序遍历.中序遍历.后序遍历的概念. 前序遍历: 1.首先访问根节点 2.然后遍历左子树 3.最后遍历右子 ...

  6. 二叉树的前序遍历,中序遍历,后序遍历-详解-配套例题

    二叉树作为数据结构中一种简单而且重要的数据结构,他的存储结构和算法都相对比较简单,因此他也显得特别重要,因为很多问题都可以抽象为二叉树的问题. 在这里我们对于二叉树的基本概念不做详细介绍,我们这里主要 ...

  7. pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值

    pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值(replace missing values with following values in column in da ...

  8. 二叉树的前序遍历,中序遍历,后序遍历学习 (原)

    经验: 不要死记各个遍历节点的位置,将一个复杂的二叉树当作一个个小的二叉树学习前序遍历,中序遍历,后序遍历会更容易理解 转载于:https://www.cnblogs.com/gyrgyr/p/962 ...

  9. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  10. 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法

    二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...

最新文章

  1. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
  2. TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊
  3. C++中最好不要在构造函数和析构函数中调用虚函数
  4. 基因组中的趣事(一):这个基因编码98种转录本
  5. pandas读取csv文件的指定列
  6. ASP中常用的服务器检测源代码
  7. Linux下PHP开启Oracle支持(oci8)
  8. sql优化常用的几种方法
  9. MATLAB与word的交互
  10. 圣思园经典Java培训教学
  11. 按是否运行源代码划分: 静态测试和动态测试
  12. 数字 IC 笔试面试必考点(1)FPGA 芯片架构
  13. 关于神经网络中的shape问题
  14. [机缘参悟-28]:鬼谷子-内揵篇-保全自己,说服上司
  15. 感知人工智能操作系统
  16. Chromedriver 安装
  17. 破解android 九宫格锁
  18. 计算机簇的定义,代数簇
  19. Infortrend CS分布式NAS集群强项之---成本篇
  20. PHP反射(ReflectionClass、ReflectionMethod)

热门文章

  1. 地税某数据库异常重启和重启后数据库运行缓慢问题的解决过程
  2. MVP 模式实例解析
  3. [USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)
  4. 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法...
  5. 这是我的第一个博客,以后遇到问题一起解决
  6. elk-Logstash
  7. linux下合并两个文件夹
  8. 微博授权失败 redirect_uri_mismatch
  9. list 转换成datatable
  10. android activity四种加载模式