python---二叉树遍历
重学。
# coding = utf-8 # 二叉树遍历 class Node: """节点类""" def __init__(self, element=None, left_child=None, right_child=None): self.element = element self.left_child = left_child self.right_child = right_child class Tree: """树类""" def __init__(self): self.root = Node() self.tree_queue = [] def add(self, element): """为树添加节点""" node = Node(element) if self.root.element is None: self.root = node self.tree_queue.append(self.root) else: tree_node = self.tree_queue[0] if tree_node.left_child is None: tree_node.left_child = node self.tree_queue.append(tree_node.left_child) else: tree_node.right_child = node self.tree_queue.append(tree_node.right_child) self.tree_queue.pop(0) def front_recursion(self, root): """利用递归实现树的先序遍历""" if root is None: return print(root.element, end=' ') self.front_recursion(root.left_child) self.front_recursion(root.right_child) def middle_recursion(self, root): """利用递归实现树的中序遍历""" if root is None: return self.middle_recursion(root.left_child) print(root.element, end=' ') self.middle_recursion(root.right_child) def later_recursion(self, root): """利用递归实现树的后序遍历""" if root is None: return self.later_recursion(root.left_child) self.later_recursion(root.right_child) print(root.element, end=' ') def front_stack(self, root): """利用堆栈实现树的先序遍历""" if root is None: return tree_stack = [] node = root while node or tree_stack: while node: print(node.element, end=' ') tree_stack.append(node) node = node.left_child node = tree_stack.pop() node = node.right_child def middle_stack(self, root): """利用堆栈实现树的中序遍历""" if root is None: return tree_stack = [] node = root while node or tree_stack: while node: tree_stack.append(node) node = node.left_child node = tree_stack.pop() print(node.element, end=' ') node = node.right_child def later_stack(self, root): """利用堆栈实现树的后序遍历""" if root is None: return tree_stack_a = [] tree_stack_b = [] node = root tree_stack_a.append(node) while tree_stack_a: node = tree_stack_a.pop() if node.left_child: tree_stack_a.append(node.left_child) if node.right_child: tree_stack_a.append(node.right_child) tree_stack_b.append(node) while tree_stack_b: print(tree_stack_b.pop().element, end=' ') def level_queue(self, root): """利用队列实现树的层次遍历""" if root is None: return tree_queue = [] node = root tree_queue.append(node) while tree_queue: node = tree_queue.pop(0) print(node.element, end=' ') if node.left_child is not None: tree_queue.append(node.left_child) if node.right_child is not None: tree_queue.append(node.right_child) if __name__ == '__main__': elem_s = range(10) # 新建一个二叉树对象 tree = Tree() for elem in elem_s: tree.add(elem) print('广度优先遍历---队列实现层次遍历:') tree.level_queue(tree.root) print('\n深度优先遍历---递归实现先序遍历:') tree.front_recursion(tree.root) print('\n深度优先遍历---递归实现中序遍历:') tree.middle_recursion(tree.root) print('\n深度优先遍历---递归实现后序遍历:') tree.later_recursion(tree.root) print('\n深度优先遍历---堆栈实现先序遍历:') tree.front_stack(tree.root) print('\n深度优先遍历---堆栈实现中序遍历:') tree.middle_stack(tree.root) print('\n深度优先遍历---堆栈实现后序遍历:') tree.later_stack(tree.root)
C:\Users\Sahara\.virtualenvs\test\Scripts\python.exe C:/Users/Sahara/PycharmProjects/test/python_search.py 广度优先遍历---队列实现层次遍历: 深度优先遍历---递归实现先序遍历: 深度优先遍历---递归实现中序遍历: 深度优先遍历---递归实现后序遍历: 深度优先遍历---堆栈实现先序遍历: 深度优先遍历---堆栈实现中序遍历: 深度优先遍历---堆栈实现后序遍历: Process finished with exit code
python---二叉树遍历的更多相关文章
- Python --- 二叉树的层序建立与三种遍历
二叉树(Binary Tree)时数据结构中一个非常重要的结构,其具有....(此处省略好多字)....等的优良特点. 之前在刷LeetCode的时候把有关树的题目全部跳过了,(ORZ:我这种连数据结 ...
- python实现二叉树遍历算法
说起二叉树的遍历,大学里讲的是递归算法,大多数人首先想到也是递归算法.但作为一个有理想有追求的程序员.也应该学学非递归算法实现二叉树遍历.二叉树的非递归算法需要用到辅助栈,算法着实巧妙,令人脑洞大开. ...
- Python -二叉树 创建与遍历算法(很详细)
树表示由边连接的节点.它是一个非线性的数据结构.它具有以下特性. 一个节点被标记为根节点. 除根节点之外的每个节点都与一个父节点关联. 每个节点可以有一个arbiatry编号的chid节点. 我们使用 ...
- 二叉树遍历(非递归版)——python
二叉树的遍历分为广度优先遍历和深度优先遍历 广度优先遍历(breadth first traversal):又称层次遍历,从树的根节点(root)开始,从上到下从从左到右遍历整个树的节点. 深度优先遍 ...
- 算法随笔-二叉树遍历的N种姿势
最近在练习用Python刷算法,leetcode上刷了快300题.一开始怀疑自己根本不会写代码,现在觉得会写一点点了,痛苦又充实的刷题历程.对我这种半路出家的人而言,收获真的很大. 今天就从二叉树遍历 ...
- Python - 二叉树, 堆, headq 模块
二叉树 概念 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树), 或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 特点 每个结点最多有两颗子树,所 ...
- python 实时遍历日志文件
首先尝试使用 python open 遍历一个大日志文件, 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readlin ...
- C++ 二叉树遍历实现
原文:http://blog.csdn.net/nuaazdh/article/details/7032226 //二叉树遍历 //作者:nuaazdh //时间:2011年12月1日 #includ ...
- 【二叉树遍历模版】前序遍历&&中序遍历&&后序遍历&&层次遍历&&Root->Right->Left遍历
[二叉树遍历模版]前序遍历 1.递归实现 test.cpp: 12345678910111213141516171819202122232425262728293031323334353637 ...
- hdu 4605 线段树与二叉树遍历
思路: 首先将所有的查询有一个vector保存起来.我们从1号点开始dfs这颗二叉树,用线段树记录到当前节点时,走左节点的有多少比要查询该节点的X值小的,有多少大的, 同样要记录走右节点的有多少比X小 ...
随机推荐
- python 爬取可用
#coding:utf-8 from bs4 import BeautifulSoup import time import threading import random import telnet ...
- Python——Window启动服务
一.新建启动服务程序 # ZPF # encoding=utf-8 import win32timezone from logging.handlers import TimedRotatingFil ...
- 使用mongo-express管理mongodb数据库
前面的话 本文将详细介绍一款用nodejs开发的基于Web的mongodb数据库管理工具mongo-express 安装 首先,全局安装 mongo-express 包 npm install -g ...
- java 的数据类型及其所占的字节数
1.char java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符. 一个数字或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字 节的第一个字节都为0,就是浪 ...
- [SimplePlayer] 1. 从视频文件中提取图像
在开始之前,我们需要了解视频文件的格式.视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述. 视频文件格式,统称为co ...
- jmeter5.1测试dubbo接口
dubbo接口功能介绍 客户端输入uncleyong(当然,也可以是其他字符串),服务端返回hello uncleyong 开发dubbo服务jmeter客户端 idea中创建模块dubbo_jmet ...
- MySQL 无法启动,出现 “发生系统错误 1067。”
出现场景 使用 net start mysql 时无法启动,并出现:发生系统错误 1067. 解决过程 很多情况都可以导致该错误提示,可以先查找 "Windows 日志" : 打开 ...
- Gym - 101350A Sherlock Bones(思维)
The great dog detective Sherlock Bones is on the verge of a new discovery. But for this problem, he ...
- mysql 连接 django
版本: django:1.11.9 python3 mysql 5.7.18 在这里我们认为你已经安装好了mysql,python ,django 下面是来自django官方教程的一段话 If you ...
- SpringCloud笔记四:Ribbon
目录 什么是Ribbon? Ribbon的配置 Maven引入 开启注解 Ribbon负载均衡 新建provider8002和8003 Ribbon核心组件IRule Ribbon自定义 什么是Rib ...