python先序中序后序的非递归版本
原地址:
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先序中序后序的非递归版本相关推荐
- 二叉树的前、中、后、层次非递归遍历(js)
有如下二叉树 遍历: // 前序遍历, head-left-rightfunction HLR (tree) {const stack = [], res = []if (tree) stack.p ...
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
- Algorithm Gossip (22) 中序式转后序式(前序式)
前言 This Series aritcles are all based on the book <经典算法大全>; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行 ...
- Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)
目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...
- 关于树的前序遍历,中序遍历,后序遍历的相互转化(含代码实现)
2019独角兽企业重金招聘Python工程师标准>>> 首先我们需要了解的是前序遍历.中序遍历.后序遍历的概念. 前序遍历: 1.首先访问根节点 2.然后遍历左子树 3.最后遍历右子 ...
- 二叉树的前序遍历,中序遍历,后序遍历-详解-配套例题
二叉树作为数据结构中一种简单而且重要的数据结构,他的存储结构和算法都相对比较简单,因此他也显得特别重要,因为很多问题都可以抽象为二叉树的问题. 在这里我们对于二叉树的基本概念不做详细介绍,我们这里主要 ...
- pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值
pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值(replace missing values with following values in column in da ...
- 二叉树的前序遍历,中序遍历,后序遍历学习 (原)
经验: 不要死记各个遍历节点的位置,将一个复杂的二叉树当作一个个小的二叉树学习前序遍历,中序遍历,后序遍历会更容易理解 转载于:https://www.cnblogs.com/gyrgyr/p/962 ...
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
- 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法
二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...
最新文章
- Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
- TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊
- C++中最好不要在构造函数和析构函数中调用虚函数
- 基因组中的趣事(一):这个基因编码98种转录本
- pandas读取csv文件的指定列
- ASP中常用的服务器检测源代码
- Linux下PHP开启Oracle支持(oci8)
- sql优化常用的几种方法
- MATLAB与word的交互
- 圣思园经典Java培训教学
- 按是否运行源代码划分: 静态测试和动态测试
- 数字 IC 笔试面试必考点(1)FPGA 芯片架构
- 关于神经网络中的shape问题
- [机缘参悟-28]:鬼谷子-内揵篇-保全自己,说服上司
- 感知人工智能操作系统
- Chromedriver 安装
- 破解android 九宫格锁
- 计算机簇的定义,代数簇
- Infortrend CS分布式NAS集群强项之---成本篇
- PHP反射(ReflectionClass、ReflectionMethod)
热门文章
- 地税某数据库异常重启和重启后数据库运行缓慢问题的解决过程
- MVP 模式实例解析
- [USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)
- 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法...
- 这是我的第一个博客,以后遇到问题一起解决
- elk-Logstash
- linux下合并两个文件夹
- 微博授权失败 redirect_uri_mismatch
- list 转换成datatable
- android activity四种加载模式