算法————笔试内容--->树(一)

:n(n≥0)个结点的有限集合。如果该集合为空,称为空树。在任意一棵非空树中:

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

2)其他结点可分为若干个互不相交的子集,而且每一个子集本身又是一棵树,称为根的子树。


基本术语:

结点:数据元素+若干指向子树的分支

结点的度:结点分支的个数,即子树的数目

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

叶子结点:度为零的结点,也称终端结点

分支结点:度大于零的结点


————————————————————————————————————————————————————————

森林:mm≥0)棵互不相交的树的集合

————————————————————————————————————————————————————————

二叉树或为空树;或是由一个根结点加上两棵分别称为右子树的、互不交的二叉树组成。

特点:

1)每个结点最多只有两棵子树;

2)两颗子树有左右之分,顺序不能换。



特殊的二叉树:满二叉树

满二叉树:指的是深度为k且含有2^k-1个结点的二叉树。

特点:1)每一层上的结点数都是最大结点数; 

            2)叶子结点都在最后一层。


特殊的二叉树:完全二叉树

完全二叉树: 树中所含的 n 个结点和满二叉树中编号为 1 n 的结点一一对应


特点:1)除了最下一层外其余各层都是满的; 

            2 )最下一层的结点都集中在该层的左侧

二叉树的性质

性质 1 满二叉树的第 i 层上有 2^( i-1)  个结点 (i 1)

性质1的推论:在二叉树的第i层上至多有2^(i-1) 个结点(i1)

性质2深度为k的满二叉树共有2^k-1个结点(k1

性质2的推论:深度为k的二叉树上最多有2^k-1个结点(k1


性质3设二叉树叶子结点数为n0度为2的结点数为n2,则必存在关系式:n0 = n2+1

性质4具有n个结点的完全二叉树的深度为      向下取整(log2(n))+1


性质5对于具有n个结点的完全二叉树,如果按照从上到下和从左至右的顺序对二叉树中的所有结点从1n进行编号,则对于任意的序号为i的结点,有

(1) i>1 ,则序号为 i 的结点的双亲结点的序号为 i/2 ;如果 i=1 ,则该结点是根,无双亲 ;
(2) 2i<=n ,则该结点的左孩子结点的序号为 2i ;否则,如 2i>n 则该结点无左孩子;
(3) 2i+1<=n ,则 i 结点的右孩子结点的序号为 2i+1 ;如果 2i+1>n ,则序号为 i 的结点无右孩子结点。

————————————————————————————————————————————————————————

二叉树存储结构

顺序存储结构:

用一组连续的存储单元存储二叉树的数据元素,以结点存储的相对位置表示结点之间的关系。为了正确地反映结点之间的关系,任何二叉树都必须按照完全二叉树的形式来存储.这种存储方式对某些二叉树的存储会造成存储空间的浪费。


链式存储结构:1.二叉链表  2.三叉链表

二叉链结构每个结点包含三个域:数据域和左右指针域,如下表所示


三叉链表结构:每个结点除包含数据域和左右指针域外,还包含一个指向其双亲结点的指针域。



在这两种结构中,只需要给出指向根结点的指针,即可访问树中任意一个结点。尽管在二叉表中无法由结点直接找到其双亲,但由于二叉链表的结构灵活,操作方便,对于一般情况下的二叉树,甚至比顺序存储结构还节省空间。因此二叉链表是最常用的二叉树存储方式。

——————————————————————————————————————————————————————————————

二叉树的遍历

遍历二叉树是指按照一定的规律对二叉树中的每个结点,访问且仅访问一次的处理过程。访问”的含义可以很广,如:求结点的度、层次、输出结点的信息等等。

遍历是任何类型均有的操作,

   1)对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。

   2)而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。


        对“二叉树”而言,可以把二叉树看成由三个基本单元组成:根结点(D)左子树(L)右子树(R),并且规定左子树上的所有结点应该在右子树上的所有结点之前被访问,由此可以得到三种遍历顺序:先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD)


先序的遍历算法--->根左右(A B D E G C F

若二叉树为空树,则空操作;否则,

    (1)访问根结点;

    (2)先序遍历左子树;

    (3)先序遍历右子树。




中序的遍历算法---->左根右(D B G E A C F

若二叉树为空树,则空操作;否则,

     (1)中序遍历左子树;

     (2)访问根结点;

     (3)中序遍历右子树.



后序的遍历算法--->左右跟(D G E B F C A)

  若二叉树为空树,则空操作;否则,

    (1)后序遍历左子树;

    (2)后序遍历右子树;

    (3)访问根结点。




————————————————————————————————————————————————————————————————————

定义:

在一棵树中节点的层数比其父节点的层数要高一些(根节点在第0层)

树的高度就是树中节点层数中的最大值。

树的路径长度就是所有树节点的层数的总和。

二叉树的内部路径长度是树的所有内部节点的层数的总和。

二叉树的外部路径长度是树的所有外部节点的层数总和。


树的数学性质:

1.一棵有N个内部节点的二叉树有N+1个外部节点

2.一棵有N个内部节点的二叉树有2N个连接:N-1个连接到内部节点,N+1个连接到外部节点。

3.任何带有N个内部节点的二叉树的外部路径长度比内部长度大2N。

4.带有N个内部节点的二叉树的高度至少是lgN,至多是N-1

5.带有N个内部节点的二叉树的内部路径长度至少是Nlg(N/4),至多N(N-1)/2



——————————————————————————————————————————————————

小贴士----》如何记住树的遍历方法:

前序遍历 : 根左右

中序遍历:  左根右

后序遍历:  左右根

注意观察”根“字的位置,根在最前面的是前序,根在中间的是中序,根在最后的为后序!!!










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值