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

一、树的定义

树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并具有层次关系的结构。它非常类似于自然界中的树。
树的递归定义:
树(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^(i-1)个结点

2:深度为k的二叉树至多有2^(k-1)个结点

3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1

4:具有n个结点的完全二叉树的深度是【log2n】+1(向下取整)

5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1?i?n),有:

如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是?i/2?

如果2i>n,则结点i无左孩子;如果2i?n,则其左孩子是2i

如果2i+1>n,则结点i无右孩子;如果2i+1?n,则其右孩子是2i+1

二叉树深度算法如下:

深度为m的满二叉树有2^m-1个结点;

具有n个结点的完全二叉树的深度为[log2n]+1.(log2n是以2为底n的对数)

扩展资料:

二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。

在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。

四、二叉树的存储结构

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

五、二叉树的操作

python数据结构之二叉树的建立实例
python数据结构之二叉树的遍历实例
python数据结构之二叉树的统计与转换实例

原文地址:https://www.cnblogs.com/ceo-python/p/11625093.html

时间: 2024-10-05 23:51:40

python数据结构树和二叉树简介的相关文章

数据结构---树、二叉树、森林

1.基本术语: 度:有两种度"结点的度"与"树的度".结点的度指的是一个结点子树的个数:树的度是指树中结点度的最大值. 叶子结点:指的是没有子树的结点. 层:树是有层次的,一般根结点为第0层.规定根结点到某结点的路径长度为该结点的层数. 深度:树中结点的最大层数 兄弟:同一双亲的结点,互为兄弟 堂兄弟:双亲在同一层次的结点,互为堂兄弟 祖先:从根结点到该结点的路径上的所有结点都是该结点的祖先. 子孙:以某一结点为根的子树上的所有结点都是该结点的子孙 森林:n棵互不相

数据结构--树,二叉树

树和二叉树用来表示数据之间一对多的关系,而线性表,栈,队列都是线性的数据结构,用来表示一对一的关系. 树只有一个根节点,根也有子节点,子节点又对应多个或者一个子节点. 根节点没有父节点. 同一个节点有可能既是父节点,又是子节点. 普通节点含有子节点,叶子界面没有子节点. 节点:树的基本单位. 节点的度:节点子树的个数. 树的度:所有节点的度的最大值. 叶子节点,无子节点的节点,即度为0的节点. 分支节点,有子节点的节点为分支节点. 节点层次,根节点1,以此类推. 输的深度:节点最大层次. 有序树

浅谈数据结构-树和二叉树之间关系

树都可用二叉链表作为存储结构,对比各自的结点结构可以看出,以二叉链表作为媒介可以导出树和二叉树之间的一个对应关系. ◆ 从物理结构来看,树和二叉树的二叉链表是相同的,只是对指针的逻辑解释不同而已. ◆ 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树一定为空. 1 树转换成二叉树 对于一般的树,可以方便地转换成一棵唯一的二叉树与之对应.将树转换成二叉树在"孩子兄弟表示法"中已给出,其详细步骤是: ⑴ 加虚线.在所有兄弟结点之间加线. ⑵ 去连线.只保留大孩子(除最左的第

数据结构 -树和二叉树

树的主要内容 树型结构:非线性结构,以分支关系定义的层次结构. 主要内容: 树和二叉树的概念.性质 二叉树的存储 二叉树的遍历 线索二叉树 树与二叉树的转化 Huffman树(最优树) 树的定义 树(Tree)是n(n≧0)个结点的有限集合T,若n=0时称为空树,否则: ⑴ 有且只有一个特殊的称为树的根(Root)结点: ⑵ 若n>1时,其余的结点被分为m(m>0)个互不相交的子集 T1, T2, T3-Tm,其中每个子集本身又是一棵树,称其为根的子树(Subtree). 这是树的递归定义,即

C#数据结构—树和二叉树

线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系.树形结构在现实世界中广泛存在,如家族的家谱.一个单位的行政机构组织等都可以用树形结构来形象地表示.树形结构在计算机领域中也有着非常广泛的应用,如 Windows 操作系统中对磁盘文件的管理.编译程序中对源程序的语法结构的表示等都采用树形结构.在数据库系统中,树形结构也是数据的重要组织形式之一.树形结构有树和二叉树两种,树的操作实现比较复杂,但树可以转换为二叉树进行处理

数据结构-树与二叉树

一.树的定义与性质 <1>定义 结点(node):树枝分叉处.树叶.树根 根结点(root):树根 叶子结点(leaf):叶子结点 边(edge):茎干和树枝 子结点(child) 子树(subtree) <2>性质 树可以没有结点,把这种情况下称为空树(empty tree) 树的层次(layer),从根结点开始算起来,即根结点为第一层 把结点的子树棵树称为结点的度(degree),而树的中结点的最大的度称为树的度(也称为树的宽度) 对于有n个结点的树的边一定是n-1 叶子结点被

数据结构----树、二叉树----c++ &amp;&amp; python

树结构,尤其是二叉树结构是算法中常遇见的,这里根据学习过程做一个总结. 二叉树所涉及到的知识点有:满二叉树与完全二叉树.节点数目的关系.节点数与二叉树高度的关系.层次遍历.深度优先遍历.广度优先遍历等等. 这里对二叉树的基本结构实现c++版本以及python版本的代码,并且实现二叉树的前中后序遍历过程以及前中.中后序列创建唯一二叉树的过程. 1.C++版本实现 基本结构: http://www.cnblogs.com/elleniou/archive/2012/05/03/2480042.htm

树和二叉树简介

一.树 1.什么是树? 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合.把它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点: 每个节点有零个或多个子节点:没有父节点的节点称为根节点:每一个非根节点有且只有一个父节点:除了根节点外,每个子节点可以分为多个不相交的子树: ? 树(tree)是包含n(n>0)个结点的有穷集,其中: (1)每个元素称为结点(node): (2)有一个特定的结点被称为根结点或树

数据结构—树(二叉树)

#define _CRT_SECURE_NO_WARNINGS 1 //树:非线性的数据结构,由有限个节点组成一个具有层次关系的集合.像是一颗倒挂的树,所以叫树. //树的相关概念: //1.节点的度:一个节点含有的子树的个数成为节点的度 //2.叶节点(终端节点):度为0的节点称为终端节点,(子节点为空的节点) //3.非终端节点(分支节点):度不为0的节点,即(子节点不为空的节点) //4.双亲节点(父节点):若一个节点含有子节点,称该节点为子节点的父节点 //5.孩子节点(子节点):一个节