初识树结构
1.定义
树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。
—来源:百度百科
树是指由n(n>=0)个结点组成的有穷集合D与D上的关系的集合R构成的结构,一般使用T表示
树需要满足以下的条件:
1.当n=0时,该结点集合为空,被称为空树
2.再任意的非空树中,有且仅有一个根结点root
3.当n>1时,除根结点以外的其余结点可以分为m(m>0)个不相交的子集D_1,D_2,…D_m,其中每一个子集D_i本身都是一棵树,是根结点root的子树
树的定义是一个递归定义
因为树是由根结点和子树构成的,而每一个子树又都是一棵树
2.树的表示
由树的定义可知,树结构在形式上最主要的特点是分层特点和具有一定的排列顺序
树的表示需要体现树的特点
2.1树形表示
像一棵自然界中倒置的树,用圆圈表示结点,结点与结点之间的关系用连线表示
2.2文氏图表示
集合图示 表示包含层次关系
3.基本术语
3.1子结点/父结点
某个结点的子树的根结点视为该结点的子结点,而该结点是其子结点的父结点
3.2结点的度
结点所拥有的子树的数目为结点的度
直观地表示就是树结构中每个结点的直接子结点个数
3.3.树的度
树中各个结点度的最大值为树的度
3.4分支结点
度不为0的结点称为分支结点或普通结点
3.5结点的层次
从树的根结点开始,根结点为第1层,根结点的子结点为第2层……第i层结点的子结点为第i+1层
3.6树的深度
树中结点的最大层次树被定义为该树的深度或高度
3.7森林
n(n>=0)棵互不相交的树的集合
3.8叶子结点
度为0的结点为叶子结点或终端结点,叶子结点无子结点
4.树的性质
性质1
非空树的结点总书等于树中所有结点的度数之和再加1
性质2
深度为k的非空k叉树(树的度为k)的第i层最多由k^(i-1)个结点
性质3
深度为h的k叉树(树的度为k)最多有(k^h-1)/(k-1)个结点
性质4
具有n个结点的k叉树的最小深度为[log_k (n(k-1)+1)]
5.树的基本操作
- 构建一棵树—初始化操作
- 判断树是否为空
- 返回一棵树的根结点
- 求指定结点的父结点
- 求指定结点的所有子结点
- 求指定结点(非叶子结点)的第i个子结点
- 求一棵树的高度
- 为指定结点添加子结点
- 删除指定结点的第i棵子树
- 将一棵以S为根结点的子树插入到以T为根结点的树中,作为结点m的第i棵子树
- 对一棵树进行遍历,按照先/后/中序依次输出所有结点
- 求树中指定结点的兄弟结点
- 求某个结点的位置
参考书籍《妙趣横生的算法(C++语言实现)》