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操作MySQL简单实现方法
Jan 26 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Python编码类型转换方法详解
Jul 01 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
python小白切忌乱用表达式
May 29 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python3访问字典里的值实例方法
Nov 18 Python
python中entry用法讲解
Dec 04 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 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
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
vue实现简单图片上传
2020/06/30 Javascript
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
学校司机岗位职责
2013/11/14 职场文书
四下基层实施方案
2014/03/28 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
考试后的感想
2015/08/07 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python