数据结构学习笔记——树的概念

来源:互联网 发布:中国期刊数据库靠谱吗 编辑:程序博客网 时间:2024/06/01 18:24

树的定义

树(Tree)是n(n≥0)个有限数据元素的集合。当n=0 时,称这棵树为空树。在一棵树T 中:
1. 有一个特殊的数据元素称为树的根结点,根结点没有前驱结点;
2. 若n>1,除根结点之外的其余数据元素被分成m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm 称为这个根结点的子树。


相关术语

  1. 结点的度:结点所拥有的子树的个数称为该结点的度。
  2. 叶结点:度为0 的结点称为叶结点,或者称为终端结点。
  3. 分支结点:度不为0 的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶结点外,其余的都是分支结点。
  4. 孩子、双亲、兄弟:树中一个结点的子树的根结点称为这个结点的孩子。这个结点称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。
  5. 路径、路径长度:如果一棵树的一串结点n1,n2,…,nk 有如下关系:结点ni 是ni+1 的父结点(1≤i< k),就把n1,n2,…,nk 称为一条由n1 至nk 的路径。这条路径的长度是k-1。
  6. 祖先、子孙:在树中,如果有一条路径从结点M 到结点N,那么M 就称为N 的祖先,而N 称为M 的子孙。
  7. 结点的层数:树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。
  8. 树的深度:树中所有结点的最大层数称为树的深度。
  9. 树的度:树中各结点度的最大值称为该树的度。
  10. 有序树和无序树:如果一棵树中结点的各子树从左到右是有次序的,即若交换了某结点各子树的相对位置,则构成不同的树,称这棵树为有序树;反之,则称为无序树。
  11. 森林:零棵或有限棵不相交的树的集合称为森林。自然界中树和森林是不同的概念,但在数据结构中,树和森林只有很小的差别。任何一棵树,删去根结点就变成了森林。

基本操作

查找类

Root(T);//求树的根结点
Value(T,cur_e);//求当前结点的元素值
Parent(T,cur_e);//求当前结点的双亲结点
LeftChild(T,cur_e);//求当前结点的最左孩子
RightSibiling(T,cur_e);//求当前结点的右兄弟
TreeEmpty(T);//判定树是否为空树
TreeDepth(T);//求树的深度
TraverseTree(T,Visit());//遍历

插入类

InitTree(&T);//初始化置空树
CreateTree(&T,definition);//按定义构造树
Assign(&T,cur_e,value);//给当前结点赋值
InsertChild(&T,&P,i,c);//将以c为根的树插入为节点p的第i棵子树

删除类

ClearTree(&T);//将树清空
DestroyTree(&T,&p,i);//删除结点p的第i棵子树


有向树:
1. 有确定的根;
2. 树根和子树根之间为有向关系
按子树之间的次序关系可分为
有序树:子树之间存在确定的次序关系。
无序树:子树之间不存在确定的次序关系。


线性结构与树形结构

线性结构 树形结构 第一个数据元素(无前驱) 根结点(无前驱) 最后一个数据元素(无后继) 多个叶子结点(无后继) 其他数据元素(一个前驱,一个后继) 其它数据元素(一个前驱,多个后继)
0 0
原创粉丝点击