数据结构与算法(1)--二叉树
博客记录的第一个算法:
实现二叉树数据结构,以及深度优先搜索和广度优先搜索算法(非科班小白,努力中。。。。)
class BT_Node: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class BTree: def __init__(self): self.root = None # None创建空树,不是BT_Node树节点 def set_root(self, node): self.root = node def is_empty(self): return self.root == None def addLeft(self, node): if self.is_empty(): self.root = node else: self.root.left = node def addRight(self, node): if self.is_empty(): self.root = node else: self.root.right = node # 深度优先搜索(先根序)
def dfs_front(node): if node == None: return print(str(node.data)+"→", end="") dfs_front(node.left) dfs_front(node.right) # 深度优先搜索(中根序)
def dfs_middle(node): if node == None: return dfs_middle(node.left) print(str(node.data) + "→", end="") dfs_middle(node.right) # 深度优先搜索(后根序)
def dfs_after(node): if node == None: return dfs_after(node.left) dfs_after(node.right) print(str(node.data) + "→", end="") # 宽度优先搜索
def bfs(node): if not node: print("this is an empty tree") st = [] #List做为队列缓存,先进先出 st.append(node) while st: temp = st[0] print(str(temp.data)+"→", end="") del st[0] if temp.right: st.append(temp.left) if temp.left: st.append(temp.right) # 以下为测试部分
t = BTree()
t.set_root(BT_Node(4))
t.addLeft(BT_Node(5,BT_Node(6),BT_Node(7)))
t.addRight(BT_Node(8,BT_Node(9),BT_Node(10)))
print("先根序:")
dfs_front(t.root)
print("\n中根序:")
dfs_middle(t.root)
print("\n后根序:")
dfs_after(t.root)
print("\n宽度优先搜索:")
bfs(t.root)
输出结果如下:
"E:\Program Files\python 3.7\python.exe" C:/Users/Administrator/Desktop/python学习/数据结构与算法/BTree.py
先根序:
4→5→6→7→8→9→10→
中根序:
6→5→7→4→9→8→10→
后根序:
6→7→5→9→10→8→4→
宽度优先搜索:
4→5→8→6→7→9→10→
Process finished with exit code 0
数据结构与算法(1)--二叉树相关推荐
- 常考数据结构与算法:输出二叉树的右视图
题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...
- 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡而二叉树 目录 二叉树的序列化和反序列化 判断一棵树是否为平衡而二叉树 1. 二叉树的序列化和反序列化 1. 递归版本序列化和反序列化 代 ...
- 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历
数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...
- 数据结构与算法之-----二叉树(一)
[ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己构建的,未使用 ...
- 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树
[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树二叉树的创建,关系建立二叉树的创建 ...
- 数据结构与算法:二叉树专题
数据结构与算法:二叉树专题 前言 前提条件 基础知识 二叉树链式存储结构 二叉树中序遍历 二叉树层序遍历 常见编程题 把一个有序整数数组放到二叉树中 逐层打印二叉树结点数据 求一棵二叉树的最大子树和 ...
- 数据结构与算法练习-二叉树中序遍历
python数据结构与算法练习-二叉树中序遍历 二叉树中序遍历 思路 python实现 二叉树中序遍历 链接: link. 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 样例 输入:ro ...
- 常考数据结构与算法:求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
- 数据结构与算法--重建二叉树
二叉树 树在实际编程中经常遇到地一种数据结构.上一篇中我们解释了二叉树及其原理,从中可以知道,树地操作会涉及到很多指针地操作,我们一般遇到地树相关地问题差不多都是二叉树.二叉树最重要地莫过于遍历,即按 ...
- 【数据结构与算法】二叉树
树 1.树.二叉树 2.二叉查找树 3.平衡二叉树.红黑树 4.递归树 一.树 1.树的常用概念 根节点.叶子节点.父节点.子节点.兄弟节点,还有节点的高度.深度以及层数,树的高度. 2.概念解释 节 ...
最新文章
- 我如何查看要使用git推送的内容?
- struts2学习笔记(常见错误)
- 【Flink】Flink 实现 AT_LEAST_ONCE EXACTLY_ONCE 案例
- mysql sysdate 格式化_MySQL函数汇总
- linux启动找不到,pxe启动的时候找不到pxelinux.0的原因
- PLL与PHY的连接:通道绑定或者不绑定
- 微软出品 Remote Desktop for Mac(远程连接工具) 汉化版
- 一个很好的弹出层插件nyroModal
- Visual Studio 2008操作技巧
- Linux下安装Java运行环境
- python期权定价公式_如何理解 Black-Scholes 期权定价模型?
- php怎么添加文字,怎么在视频里加文字 在视频中添加文字
- 什么是bug?bug的分类
- 字体转换 (代码整理 备忘)
- 网卡多队列、RSS、RPS、RFS
- Java——为什么要有接口?
- YOLOv7(目标检测)入门教程详解---环境安装
- SDNU-1183.纪念品分组
- 遥感图像语义分割——从原始图像开始制作自己的数据集(以高分二号为例)
- mysql端口号543_系统里的那些端口在哪里?