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 相关文章推荐
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python读取并写入mat文件的方法
Jul 12 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python opencv实现信用卡的数字识别
Jan 12 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
python绘制趋势图的示例
Sep 17 Python
python实现杨辉三角的几种方法代码实例
Mar 02 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 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
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
简单介绍python封装的基本知识
2019/08/10 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python文件和文件夹复制函数
2020/02/07 Python
Python对wav文件的重采样实例
2020/02/25 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
公司应聘求职信
2014/06/21 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
文明旅游倡议书
2015/04/28 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL