数据结构(c语言版)(5.1树)

树的定义:
二元组的形式:
T=(D, R)
其中,D为树T中结点的集合,R为树中结点之间关系的集合。
当树T为空树时,即D=Φ;
当树T不为空树时,有:
D={Root}∪DF
其中,Root为树T的根结点,DF为树T的根Root的子树集合

从树的定义和图(a)的示例可以看出,树具有下面两个特点:
(1)树的根结点没有直接前趋,除根结点之外的所有结点有且只有一个直接前趋。
(2)树中所有结点可以有零个或多个直接后继。
由此特点可知,图(b)、图(c)、图(d)所示的都不是树结构。
在这里插入图片描述
相关术语;
(1)结点:包含一个数据元素及若干指向其他结点的分支信息的数据结构。
(2)结点的度:结点所拥有的子树的个数称为该结点的度。
(3)叶子结点:度为0的结点称为叶子结点,或者称为终端结点。
(4)分支结点:度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶子结点外,其余的结点都是分支结点。
(5)孩子结点、双亲结点、兄弟结点:树中一个结点的子树的根结点称为这个结点的孩子结点,这个结点称为它孩子结点的双亲结点。具有同一个双亲结点的孩子结点互称为兄弟结点。
(6)路径、路径长度:设n1, n2, …, nk为一棵树的结点序列,若结点ni是ni+1的双亲结点(1≤i <k),则把n1, n2, …, nk称为一条由n1至nk的路径。这条路径的长度是k-1。
(7)祖先、子孙:在树中,如果有一条路径从结点M到结点N,那么M就称为N的祖先,而N称为M的子孙。
(8)结点的层次:规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。
(9)树的深度(高度):树中所有结点的层次的最大数称为树的深度。
(10)树的度:树中所有结点的度的最大值称为该树的度。
(11)有序树和无序树:如果一棵树中结点的各子树从左到右是有次序的,即若交换了某结点各子树的相对位置,则构成不同的树,称这棵树为有序树;反之,则称为无序树。
(12)森林:m(m≥0)棵不相交的树的集合称为森林。自然界中树和森林是不同的概念,但在数据结构中,树和森林只有很小的差别。任何一棵树,删去根结点就变成了森林;反之,给森林增加一个统一的根结点,森林就变成了一棵树。

树的基本操作
树的基本操作通常有以下几种。
(1)Initiate(t):初始化一棵空树t。
(2)Root(x):求结点x所在树的根结点。
(3)Parent(t, x):求树t中结点x的双亲结点。
(4)Child(t, x, i):求树t中结点x的第i个孩子结点。
(5)RightSibling(t, x):求树t中结点x右边的第一个兄弟结点(也称右兄弟结点)。
(6)Insert(t, x, i, s):把以s为根结点的树插入到树t中作为结点x的第i棵子树。
(7)Delete(t, x, i):在树t中删除结点x的第i棵子树。
(8)Traverse(t):是树的遍历操作,即按某种方式访问树t中的每个结点,且使每个结点只被访问一次。遍历操作是非线性结构中非常常用的基本操作,许多对树的操作都是借助该操作实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值