二叉树的前序、中序、后序非递归遍历 python实现
前言
python中二叉树的定义:
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None
如何使用python建立一个二叉树
前序
class Solution:def preorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""ret = []stack = [root]while stack:node = stack.pop()if node:ret.append(node.val)stack.append(node.right)stack.append(node.left)return ret
通过使用栈先保存要访问的结点,这里有一点需要注意的是,我们每次先将node的右结点加入到了stack中,然后再加入的是左结点,这样我们就可以保证在每次stack弹栈的时候,左结点始终先弹出来了。
中序
class Solution:def inorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""res, stack = [], []while True:while root:stack.append(root)root = root.leftif not stack:return resnode = stack.pop()res.append(node.val)root = node.right
通过stack每次都保存左子树的所有结点,当左子树已经全部加入了,这时候要访问左子树的叶子结点,然后需要转向,加入当前结点的右结点,然后再继续上述的过程。
后序
class Solution:def postorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""nodes = []# to_visit是存储结点的栈to_visit = []cur = rootlast_node = None# 如果当前结点或者要遍历的结点不为空就持续遍历while cur or len(to_visit) != 0:# 一直访问左子树,直至为空if cur:to_visit.append(cur)cur = cur.leftelse:# 取到栈中最顶部的结点,然后判断是否有右结点并且右结点是否已经访问过top_node = to_visit[-1]if top_node.right and last_node != top_node.right:cur = top_node.rightelse:# 访问结点,并且将last_node记录为当前访问的结点nodes.append(top_node.val)last_node = top_nodeto_visit.pop()return nodes
二叉树的前序、中序、后序非递归遍历 python实现相关推荐
- 二叉树的前、中、后的非递归遍历
题目 实现一个链式存储的二叉树,采用非递归的形式,按照前.中.后序的顺序遍历二叉树. 代码 /** * 二叉树的前.中.后序的非递归遍历 **/#include <iostream> us ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...
- 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】
1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...
- java数据结构学习笔记-二叉树前、中、后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
- 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...
- 二叉树前、中、后序线索化及遍历
public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronode ...
- 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构
本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
最新文章
- Overlapping Rectangles 离散+线段树 +扫描线
- python语言能干什么-学Python语言可以做什么?
- python爬取拉勾网_python爬虫—爬取拉钩网
- gulp编译html中的less,使用插件less-plugin-functions让gulp-less支持自定义函数
- 【模电】共射放大电路(直接耦合+阻容耦合、NPN)
- 虹膜数据集_虹膜数据集的聚类分析
- kappa一致性检验
- 一份完整的数据分析师成长书单
- Linux 自带神器 logrotate 详解
- 为什么NFT的头像卖这么贵?这与IPFS/FIL有什么联系
- Unity WebGL网页背景透明化(2021更新)
- php GD库的使用
- 【SoC FPGA】外设PIO按键点灯
- IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总,域名历史解析记录查询,IP地址查对应机房名称、地址,查IP地址的AS号码...
- 小米生态链的战投启示
- Office LTSC 2021离线安装ISO镜像
- vue 中echarts的使用
- google的地址搜索
- unity游戏开发_stealth秘密潜入
- 自定义实现wcf的用户名密码验证