前言

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实现相关推荐

  1. 二叉树的前、中、后的非递归遍历

    题目 实现一个链式存储的二叉树,采用非递归的形式,按照前.中.后序的顺序遍历二叉树. 代码 /** * 二叉树的前.中.后序的非递归遍历 **/#include <iostream> us ...

  2. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  3. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  4. 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】

    1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...

  5. java数据结构学习笔记-二叉树前、中、后序遍历

    public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...

  6. 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】

    1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...

  7. 二叉树前、中、后序线索化及遍历

    public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronode ...

  8. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  9. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

最新文章

  1. Overlapping Rectangles 离散+线段树 +扫描线
  2. python语言能干什么-学Python语言可以做什么?
  3. python爬取拉勾网_python爬虫—爬取拉钩网
  4. gulp编译html中的less,使用插件less-plugin-functions让gulp-less支持自定义函数
  5. 【模电】共射放大电路(直接耦合+阻容耦合、NPN)
  6. 虹膜数据集_虹膜数据集的聚类分析
  7. kappa一致性检验
  8. 一份完整的数据分析师成长书单
  9. Linux 自带神器 logrotate 详解
  10. 为什么NFT的头像卖这么贵?这与IPFS/FIL有什么联系
  11. Unity WebGL网页背景透明化(2021更新)
  12. php GD库的使用
  13. 【SoC FPGA】外设PIO按键点灯
  14. IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总,域名历史解析记录查询,IP地址查对应机房名称、地址,查IP地址的AS号码...
  15. 小米生态链的战投启示
  16. Office LTSC 2021离线安装ISO镜像
  17. vue 中echarts的使用
  18. google的地址搜索
  19. unity游戏开发_stealth秘密潜入
  20. 自定义实现wcf的用户名密码验证

热门文章

  1. 2022-2028年中国丙烯酸酯橡胶行业市场深度分析及投资前景分析报告
  2. Go 学习笔记(67)— Go 并发安全字典 sync.Map
  3. 虚拟机网络连接方式linuxcentos
  4. LARS 算法简介-机器学习
  5. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
  6. Conv1D和Conv2D的区别
  7. Python 应用领域以及版本之间的区别
  8. Java基础Switch和循环控制
  9. php配置mongodb扩展、安装mongodb服务教程
  10. python3生成二维码中间带logo,有底图,可自定义文字