树的概念

文章介绍了树这种数据结构的基本概念,包括根节点、子树、结点及其关系,以及树的度、层次和深度等属性。此外,提到了一些常见的树类型如二叉树、并讨论了树的创建、销毁、遍历等基本操作。
摘要由CSDN通过智能技术生成

一、树的定义

树(Tree)是 n(n≥0) 个结点的有限集T,并且当 n>0 时满足下列条件:

有且仅有一个特定的称为根(Root)的结点;

当 n>1 时,其余结点可以划分为 m(m>0) 个互不相交的有限集T1、T2 、…、Tm,每个集 Ti(1≤i≤m) 均为树,且称为树T的子树(SubTree)。

特别地,不含任何结点(即n=0)的树,称为空树。

二、基本术语

根节点(root):树顶端的节点称之为根节点,也叫树根。

子树(subTree):除根节点之外,其他节点可以分为多个树的集合,叫做子树,如图1中,H这个节点可以称之为一颗子树,而D、H、I三个节点组合起来也可以叫做一颗子树。

结点(node):存储数据元素和指向子树的链接,由数据元素和构造数据元素之间关系的引用组成。

子结点:树中一个结点的子树的根结点称为这个结点的子结点。

双亲结点:树中某个结点有孩子结点(即该结点的度不为0),该结点称为它孩子结点的双亲结点,也叫前驱结点。双亲结点和孩子结点是相互的。

兄弟结点:具有相同双亲结点(即同一个前驱)的结点称为兄弟结点。

堂兄弟节点:同一层,父节点不同,或者说双亲节点在同一层的节点称之为堂兄弟节点。

叶子结点:度为0的结点称为叶子结点,也叫终端结点。

分支结点:度不为0的结点称为分支结点,也叫非终端结点。

节点的祖先:从根节点到某一节点一路顺下来的除了该节点的所有节点都是该节点的祖先节点。

节点的子孙:以某节点为根的子树中,任何一个节点都是其子孙,也就是说这个节点下面与这个节点有关的节点都是这个节点的子孙。

结点的度:结点所有子树的个数称为该结点的度。

树的度:树中所有结点的度的最大值称为树的度。

结点的层次:从根结点到树中某结点所经路径的分支数称为该结点的层次。根结点的层次一般为1(也可以自己定义为0),这样,其它结点的层次是其双亲结点的层次加1.

树的深度:从根节点开始、自顶向下逐层累加(根节点的高度是1)助记:深度从上到下。

树的高度:从叶节点开始、自底向上逐层累加(叶节点的高度是1)助记:高度由下向上。

有序树和无序树:树中任意一个结点的各子树按从左到右是有序的,称为有序树,否则称为无序树。

森林:由m棵不相交的树组成的集合,叫做森林。

数据元素:具有相同特性的数据元素的集合。

结构关系:树中数据元素间的结构关系由树的定义确定。

三、树的类型

常见的树有二叉树、平衡二叉树、二叉查找树、B树、B+树、哈夫曼树、B*树、红黑树和trie树等。

四、基本操作

创建树IntTree(&T)

销毁树DestroyTree(&T)

构造树CreatTree(&T,deinition)

置空树ClearTree(&T)

判空树TreeEmpty(T)

求树的深度TreeDepth(T)

获得树根Root(T)

获取结点Value(T,cur_e,&e)

数据赋值Assign(T,cur_e,value)

获得双亲Parent(T,cur_e)

获得最左孩子LeftChild(T,cur_e)

获得右兄弟RightSibling(T,cur_e)

插入子树InsertChild(&T,&p,i,c)

删除子树DeleteChild(&T,&p,i)

遍历树TraverseTree(T,visit())

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值