python数据结构树和二叉树简介


Posted in Python onApril 29, 2014

一、树的定义

树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并具有层次关系的结构。它非常类似于自然界中的树。
树的递归定义:
树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:
(1)有且仅有一个特定的称为根(Root)的结点;
(2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。

二、二叉树的定义

二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由一个根和称为左、右子树的两个不相交的二叉树组成。
特点:
(1)二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
(2)二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
(3)二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。

三、二叉树的性质

性质1:二叉树的第i层上最多有个结点。
性质2:深度为h的二叉树上最多有-1个结点。
性质3:具有n个结点的二叉树的高度不小于的最大整数。
性质4:任意一棵二叉树中,如果叶子结点的个数为n0,度为2的结点的个数为n2,则必然有n0=n2+1。
满二叉树:若深度为h的二叉树,恰好具有-1个结点,则称为满二叉树。
完全二叉树:若一棵具有n个结点的二叉树的逻辑结构与满二叉树的前n个结点的逻辑结构完全相同,则称该二叉树为完全二叉树
扩充二叉树:除叶子结点外,其余结点都必须有两个孩子的二叉树。

四、二叉树的存储结构

二叉树的存储结构有顺序存储结构、链式存储结构
顺序存储:结构采用一维数组存储的。根据二叉树的性质6可计算出双亲结点、左右孩子结点的下标。因此满二叉树、完全二叉树的存储可采用一维数组,把结点按从上到下、从左到右的顺序存放在数组中,结点之间的关系可由性质6的公式计算得到。
链式存储:结构采用链表存储二叉树中的数据元素,用链建立二叉树中结点之间的关系。二叉树最常用的链式存储结构是二叉链,每个结点包含三个域,分别是数据元素域data、左孩子链域lChild和右孩子链域rChild。与单链表带头结点和不带头结点的两种情况相似,二叉链存储结构的二叉树也有带头结点和不带头结点两种

五、二叉树的操作

Python 相关文章推荐
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
python编写弹球游戏的实现代码
Mar 12 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
pytorch 求网络模型参数实例
Dec 30 Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 Python
Python 如何创建一个线程池
Jul 28 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
Python的ORM框架SQLAlchemy入门教程
Apr 28 #Python
Python中实现远程调用(RPC、RMI)简单例子
Apr 28 #Python
Python的ORM框架SQLObject入门实例
Apr 28 #Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 #Python
python监控网卡流量并使用graphite绘图的示例
Apr 27 #Python
python抓取网页图片示例(python爬虫)
Apr 27 #Python
python实现sublime3的less编译插件示例
Apr 27 #Python
You might like
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
javascript解析json实例详解
2014/11/05 Javascript
JS简单计算器实例
2015/01/20 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python模拟百度登录实例详解
2016/01/20 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Python处理session的方法整理
2019/08/29 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
货代行业个人求职简历的自我评价
2013/10/22 职场文书
环保建议书作文
2014/03/12 职场文书
优秀护士演讲稿
2014/04/30 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS