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 相关文章推荐
Python socket编程实例详解
May 27 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python类的动态修改的实例方法
Mar 24 Python
Python中max函数用于二维列表的实例
Apr 03 Python
Django中的forms组件实例详解
Nov 08 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
pytorch损失反向传播后梯度为none的问题
May 12 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
如何使用angularJs
2017/05/08 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python 实现倒排索引的方法
2018/12/25 Python
Python shutil模块用法实例分析
2019/10/02 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
三八节主持词
2014/03/17 职场文书
合作意向协议书范本
2014/03/31 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
武当山导游词
2015/02/03 职场文书
开学随笔
2015/08/15 职场文书
高三数学教学反思
2016/02/18 职场文书