二叉树遍历(Python)
文章目录
- 遍历二叉树
- #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)相关推荐
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
- 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...
二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...
- 二叉树序列化、反序列化、层次遍历python
一.二叉树的分层遍历 给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 思路: 增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlas ...
- 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历
# -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...
- Python:二叉树遍历
二叉树遍历共有四种方法,分别是前序遍历.中序遍历.后序遍历和层次遍历. 前序遍历: 父节点--左孩子--右孩子 中序遍历:左孩子--父节点--右孩子 后序遍历:左孩子--右孩子--父节点 层次遍历:利 ...
- 【数据结构】二叉树的python实现
[数据结构]二叉树的python实现 本博文描述的二叉树是任意二叉树,可以使完全二叉树,也可以是非完全二叉树. 首先声明一个二叉树节点的初始化类TNode,每一个节点都有三个组成部分,节点的元素值,节 ...
- 二叉树(python实现)
1. BinaryTree (二叉树) 二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子树和右子树的二叉树组成. 二叉树的每个结点至多只 ...
- 数据结构之二叉树(遍历、建立、深度)
数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...
- C#二叉树遍历算法实现浅析
C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...
最新文章
- arthas 排查内存溢出_小学妹问我:如何利用可视化工具排查问题?
- 关于python搞笑段子_Python爬取内涵段子里的段子
- ElasticSearch 创建父子类型
- mysql 删除重复数据_日常答疑|MySQL删除重复数据踩过得坑
- Ubuntu18.04搭建Web服务器
- [POJ3177]Redundant Paths(双联通)
- OpenCV算子速查表(持续更新)
- python docx table 边框_使用pythondocx指定表中的边框外观
- 多说评论系统API调用和本地身份说明(JWT)
- KSZ9897 switch 交换机
- matlab-模拟退火算法
- VIM Is More Than Enough For Programer
- 微信小程序做图片压缩
- 京东店铺如何获取流量
- 虚拟现实技术启蒙_艾孜尔江撰
- abp zero mysql_2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
- 七年交易经验,倾囊分享中长线交易秘诀
- 两个字与三个字对齐html,css三个字如何和两个字对齐?
- 个人博客搭建——介绍几种博客搭建框架
- VS1005 VSOS 固件和 MegaLib 亮点
热门文章
- 源壁纸微信小程序源码,小米壁纸自动更新采集
- a padding to disable MSIE and Chrome friendly error page
- 网络红人“犀利哥”受聘广东顺德当时装模特
- 解决蓝牙耳机连笔记本后音质变差的问题(win10)
- BMP、GIF、JPEG、PNG以及其他图片格式简介
- 互联网快讯:今年《英雄联盟》全明星赛将停办;极米优质投影产品获好评;酷派正式发布新品COOL 20 Pro
- 鼠标点击效果变成小手的CSS实现
- kerberos : Failed to find any Kerberos tgt
- python读取xlsx文件
- 怎么将图片中的水印去掉,去水印工具有什么