数据结构 - 树 (一)

内容来自于:《大话数据结构》读书笔记

树的定义

树的定义要注意两点

  • 第一是如果一棵树他根结点那么根结点必定唯一。
  • 第二是子树的个数没有限制,但是他们一定是互不相交。
节点相关概念

节点的度,叶节点和终端节点,非终端节点或者分支结点,内部节点,树的度

树的其他相关概念

树的深度或者高度就是最大层次,有序树和吴序树的概念,森林的概念,线性结构与树结构的最主要的区别就是一个是一对一,一个是一对多。

树的存储结构

第一种 双亲表示法。

最基本的双亲表示法就是为一个节点分配存储空间的时候。有一个数据域还有一个指针域。也可以根据需要分为指向孩子节点的指针。这种存储方式可以很方便的找到她的双亲结点,时间复杂度为O(1)。非常方便。因为如果你需要查找对应的孩子节点或者兄弟节点,堂兄弟节点,就只需要增加对应的指针的就可以了。

第二种 孩子表示法

方案一 给所有的节点分配的指针个数等于树的度

这种分配方式比较简单,因为节点的度不同,但是空间浪费的比较大。如果每个节点的度都相同或者相近的话就比较适合。

方案二 每个结点指针域的个数等于该节点的度。

但是取一个专门的位置来存储节点指针域的个数。这种方法克服了浪费空间的缺点,但是在时间上会带来损耗。

方案三 孩子表示法。

把每个节点的孩子节点连接起来。用单链表作为存储结构,n个结点,有n个链表,如果是叶子节点单链表为空。然后又n个头指针指向这些链表。最后将这些节点的数据域和头指针采用顺序存储结构,放进一个一维数组里面。这种方式有两种节点存储结构。一种是数据域和头指针组成的顺序存储结构,第二种是孩子节点之间组成的链式存储结构。

可以把双亲表示法和孩子表示法综合一下。在原来的数据域和头指针节点上面增加一块用来存储双亲结点,这种方法称为双亲孩子表示法

第三种,孩子兄弟表示法。

这种方法每个树的节点分为三块,一块是数据域,一块存储一个指向第一个孩子节点的指针,最后一个存储指向该结点的右兄弟的指针。这种方式最大的好处就是把任意的一棵树转化成了一棵二叉树。然后可以利用二叉树的特性和算法来处理这棵树。当然,如果你要查找双亲节点的话。也可以在这个节点中储结构上面再增加一块指向双亲节点的指针。

二叉树

二叉树的特点
  • 第一,每个节点最多有两个子树,所以二叉树中不存在度大于二的节点。
  • 第二,左子树和右子树是有顺序的。
  • 第三,即便只有一棵子树也要区分是左子树还是右子树。
二叉树的五种基本形态。
  • 第一,空二叉树
  • 第二,只有一个根节点。
  • 第三,根节点只有左子树
  • 第四,根节点只有右子树
  • 第五,根节点既有左子树,又有右子树。
特殊二叉树
第一,斜树。

分为左斜树和右斜树,如果所有的节点都是只有左子树的二叉树叫做左斜树。相反的叫做右斜树。

第二,满二叉树。

所有的分支节点都存在左子树和右子树,并且所有的叶子都在同一层上。

满二叉树的特点
  • 第一,叶子只能出现在最下一层。
  • 第二,非叶子节点的度一定是二。
  • 第三,在同样深度的二叉树中,满二叉数的结点个数最多叶子数最多。
第三,完全二叉树。

就是满二叉树,最后面一层右边有部分节点缺失了。同样节点数的二叉树,完全二叉树的深度最小。

二叉树的性质
  • 性质一,这二叉树的第i层上最多只有2的(k-1)次个节点。
  • 性质二,深度为k的二叉树至多有2的k次-1个节点。
  • 性质三,对于任何一棵二叉树,度为零的结点数等于度为二的节点数+1
  • 性质四,具有n个结点的完全二叉树的深度为[log2n]+1
  • 性质五,对于一颗有n个结点的完全二叉树,对任一节点 i,
    1,如果i=1,那么i是二叉树的根节点,无双亲。如果i>1,则其双亲节点是[i/2]。
    2,如果2i>n,则节点i无左孩子,否则其左孩子节点为2i
    3,如果2i+1>n,则节点i无右孩子,否则其右孩子是节点2i+1。

二叉树的存储结构

顺序存储结构

顺序存储结构一般只用来存储完全二叉树,具体存储方法是将完全二叉树按照程序编号从上到下,从左到右依次存储在一个一维数组里面。

链式存储方法

每个节点包含一个数据和两个指针域两个指针域分别指向他的左右节点。

参考资料:大话数据结构

———————————————分割线——————————————

以后会详写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值