文章目录

  • 遍历二叉树
    • #0 GitHub
    • #1 环境
    • #2 开始
      • #2.1 层次遍历
        • #1 思路分析
        • #2 代码实现
        • #3 测试
      • #2.2 先序遍历
        • #1 思路
        • #2 代码实现
        • #3 测试
      • #2.3 中序遍历
        • #1 思路
        • #2 代码实现
        • #3 测试
      • #2.4 后序遍历
        • #1 思路
        • #2 代码实现
        • #3 测试

遍历二叉树

#0 GitHub

https://github.com/Coxhuang/binary-tree-traversal

#1 环境

Python3.7.3

#2 开始

#2.1 层次遍历

#1 思路分析

#2 代码实现

# Definition for a binary tree node.
class TreeNode:"""节点"""def __init__(self, x):self.val = xself.left = Noneself.right = None
class Solution:def levelOrderBottom(self, root):"""层次遍历:param root: 根节点:return: list_node -> List """queue_node = [root]  # 队列list_node = []  # 层次遍历存放结果列表while queue_node:  # 队列不为空,一直循环node = queue_node.pop()  # 出队if not node: # 节点为空, 从头开始, 不把空节点放入结果列表 continuelist_node.append(node.val) # 把节点数值存放到结果列表 queue_node.insert(0, node.left) # 左节点先入队 queue_node.insert(0, node.right) # 右节点后入队 print(list_node) return list_node

#3 测试


输出

# 层次遍历
[3, 9, 20, 15, 7]

#2.2 先序遍历

#1 思路

#2 代码实现

# Definition for a binary tree node.
class TreeNode:"""节点"""def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def levelOrderBottom(self, root):"""先序遍历:param root: 根节点:return: list_node -> List"""stack_node = [root]  # 栈list_node = []  # 先序遍历结果存放列表while stack_node: # 栈不为空node = stack_node.pop() # 栈顶节点出栈if not node: # 节点为空continuelist_node.append(node.val) # 把不为空的节点数值存到列表stack_node.append(node.right) # 右节点先压栈stack_node.append(node.left) # 左节点后压栈print(list_node)return list_nodedef preOrderBottom_re(self, root):"""先序遍历 递归:param root: 根节点:return: list_node -> List"""if not root:return Noneprint(root.val)self.preOrderBottom_re(root.left)self.preOrderBottom_re(root.right)

#3 测试

#2.3 中序遍历

#1 思路

#2 代码实现

# Definition for a binary tree node.
class TreeNode:"""节点"""def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def levelOrderBottom(self, root):"""中序遍历 非递归:param root:  根节点:return: list_node -> List"""stack_node = []  # 栈list_node = []  # 中序遍历结果存放列表node_p = root # 当前节点while stack_node or node_p: # 当前节点不为空 or 栈不为空while node_p: # 一直移动到最左端stack_node.append(node_p) # 节点压栈node_p = node_p.left # 指针左移node = stack_node.pop() # 出栈 list_node.append(node.val) # 获取节点数据 node_p = node.right # 获取有节点print(list_node)return list_nodedef inOrderBottom_re(self, root):"""中序遍历 递归:param root: 根节点:return: list_node -> List"""if not root:return Noneself.inOrderBottom_re(root.left)print(root.val)self.inOrderBottom_re(root.right)

#3 测试


#2.4 后序遍历

#1 思路

#2 代码实现

# Definition for a binary tree node.
class TreeNode:"""节点"""def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def levelOrderBottom(self, root):"""后序遍历 非递归:param root: 根节点:return: list_node -> List"""stack_node = [root]list_node = []while stack_node:node = stack_node.pop()if node.left: # 左孩子不为空stack_node.append(node.left) # 左孩子压栈if node.right: # 右孩子不为空stack_node.append(node.right) # 右孩子压栈list_node.append(node.val) # 获取当前指针数值list_node.reverse() # 取反return list_nodedef postOrderBottom_re(self, root):"""后序遍历 递归:param root: 根节点:return: list_node -> List"""if not root:return Noneself.postOrderBottom_re(root.left)self.postOrderBottom_re(root.right)print(root.val)

#3 测试



二叉树遍历(Python)相关推荐

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

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

  2. 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...

    二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...

  3. 二叉树序列化、反序列化、层次遍历python

    一.二叉树的分层遍历 给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 思路: 增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlas ...

  4. 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历

    # -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...

  5. Python:二叉树遍历

    二叉树遍历共有四种方法,分别是前序遍历.中序遍历.后序遍历和层次遍历. 前序遍历: 父节点--左孩子--右孩子 中序遍历:左孩子--父节点--右孩子 后序遍历:左孩子--右孩子--父节点 层次遍历:利 ...

  6. 【数据结构】二叉树的python实现

    [数据结构]二叉树的python实现 本博文描述的二叉树是任意二叉树,可以使完全二叉树,也可以是非完全二叉树. 首先声明一个二叉树节点的初始化类TNode,每一个节点都有三个组成部分,节点的元素值,节 ...

  7. 二叉树(python实现)

    1. BinaryTree (二叉树) 二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子树和右子树的二叉树组成. 二叉树的每个结点至多只 ...

  8. 数据结构之二叉树(遍历、建立、深度)

    数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...

  9. C#二叉树遍历算法实现浅析

    C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...

最新文章

  1. arthas 排查内存溢出_小学妹问我:如何利用可视化工具排查问题?
  2. 关于python搞笑段子_Python爬取内涵段子里的段子
  3. ElasticSearch 创建父子类型
  4. mysql 删除重复数据_日常答疑|MySQL删除重复数据踩过得坑
  5. Ubuntu18.04搭建Web服务器
  6. [POJ3177]Redundant Paths(双联通)
  7. OpenCV算子速查表(持续更新)
  8. python docx table 边框_使用pythondocx指定表中的边框外观
  9. 多说评论系统API调用和本地身份说明(JWT)
  10. KSZ9897 switch 交换机
  11. matlab-模拟退火算法
  12. VIM Is More Than Enough For Programer
  13. 微信小程序做图片压缩
  14. 京东店铺如何获取流量
  15. 虚拟现实技术启蒙_艾孜尔江撰
  16. abp zero mysql_2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
  17. 七年交易经验,倾囊分享中长线交易秘诀
  18. 两个字与三个字对齐html,css三个字如何和两个字对齐?
  19. 个人博客搭建——介绍几种博客搭建框架
  20. VS1005 VSOS 固件和 MegaLib 亮点

热门文章

  1. 源壁纸微信小程序源码,小米壁纸自动更新采集
  2. a padding to disable MSIE and Chrome friendly error page
  3. 网络红人“犀利哥”受聘广东顺德当时装模特
  4. 解决蓝牙耳机连笔记本后音质变差的问题(win10)
  5. BMP、GIF、JPEG、PNG以及其他图片格式简介
  6. 互联网快讯:今年《英雄联盟》全明星赛将停办;极米优质投影产品获好评;酷派正式发布新品COOL 20 Pro
  7. 鼠标点击效果变成小手的CSS实现
  8. kerberos : Failed to find any Kerberos tgt
  9. python读取xlsx文件
  10. 怎么将图片中的水印去掉,去水印工具有什么