树与二叉树

本文介绍了树的基本概念,包括结点、度、高度和深度,以及树的抽象数据类型和存储结构。接着深入讲解了二叉树的定义、性质,包括完全二叉树和满二叉树,并探讨了二叉树的实现和四种遍历方法:层次遍历、先序遍历、中序遍历和后序遍历。
摘要由CSDN通过智能技术生成

 

目录

1.树的定义

2.树的基本概念

2.1结点

2.2度

2.3高度和深度

2.4森林

3.树的抽象数据类型及存储结构

3.1抽象数据类型

3.2存储结构

4.二叉树

4.1二叉树的定义

4.2二叉树的性质

5.二叉树的实现

6.二叉树的遍历

6.1层次遍历

6.2先序遍历

6.3中序遍历

6.4后序遍历



       我们知道,对于向量vector和列表list属于线性结构。vector实质是由动态数组进行封装,而list内部结构是一个链表。vector的查找效率非常高,最快可以做到llogn级别(二分查找),而插入和删除效率低,都需要线性的时间。然而列表list恰恰相反,插入删除效率高,查找的效率低。有没有一种数据结构兼有二者优点呢?

     树这种结构恰好满足这种要求。

1.树的定义

       在数学中,树结构被定义为一种特殊的图,也就是说它可以定义为一组元素的二元关系。元素与元素之间存在某种关系,我们就引入一条边,没有则不引入。所有能够定义二元关系的元素称为顶点,二元关系称为边。树是n(n>=0)个节点的有限集合,选取其中一个结点作为根结点,其他的m个结点又是一个互不相交的有限集,又可以单独作为一棵树。其实,我们可以把树这种结构看成一个二维链表。如图:

       我们取m1作为根节点,m1和m2,m3有二元关系,所以他们之间存在一条边。同理可得m3~m6.但是,要构成一棵树,要满足根结点外的结点不存在交集,也就是无法构成环,形成回路。如:

2.树的基本概念

2.1结点

根节点:没有双亲结点的结点。如图1-1m1

内结点:除根结点以外的结点。如m2~m6

双亲结点:孩子结点的直接祖先。m4,m5的直接祖先是m2,m6直接祖先是m3.所以m2是m4,m5的 双亲,同理可得m3。

孩子:结点的子树的根节点称为该节点的孩子结点。m1结点的孩子结点为m2和m3

兄弟:由同一个双亲产生的孩子结点互为兄弟结点。例如,m2与m3互为兄弟结点,他们的双亲结点为m1。
子孙:有同一个根节点的子树的任意结点称为子孙。

2.2度

        一个树的结点包含一个数据元素及若干个指向其子树的分支。该结点拥有的子树的个数称为该结点的度。

2.3高度和深度

        结点的层次从根结点开始定义,根为第一层。根的孩子为第二层。树中结点的最大层为数的深度。树的高度和树的深度定义角度不太一样,树的深度自上而下定义,树的高度自下而上定义,但是,本质上描述树的层次时区别不大。

2.4森林

森林是m棵互不相交的树的集合。

3.树的抽象数据类型及存储结构

3.1抽象数据类型

            结点                              功能
         root()   根结点
         parent() 父结点
        firstChild() 长子
       nextSibing() 兄弟
       insert(i,e) 将e作为第i个孩子插入
      remove(i) 删除第i个孩子
      traverse() 遍历

3.2存储结构

3.2.1双亲表示法</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值