数据结构与算法:树

树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树状图有和树相同的结构,树有根、枝、叶,而树状图也有根——根节点、枝——非叶子节点的子节点、叶——叶子节点。每颗树只会有一个根,枝能衍生出新的枝和叶,而叶是最后的一个部位,同理树状图也一样。

树的常用词:

  • 节点:树中的每个元素都叫节点

  • 节点的度:即节点的子节点数量,当节点含有俩个子节点时,那它的度就为2

  • 权值:节点的值

  • 根节点:树的第一个元素,它没有父节点

  • 父节点:若一个元素含有子节点,则它就是该子节点的父节点

  • 子节点:若一个元素含有父节点,则它就是该父节点的子节点

  • 叶子节点:若一个元素含有父节点,但它没含子节点,那它就是一个叶子节点

  • 子树:若一个元素含有父节点,则该节点和该节点下所有子节点(包括子节点的子节点)组成的一个树就是父节点的子树

  • 森林:由m(m>=0)棵互不相交的树的集合称为森林

  • 树的层级:根节点为第一层,它的子节点为第二层,该子节点的子节点为第三层,以此类推

  • 树的度:树中所有节点度的最大值

  • 树的高度或深度:即树的最大层级

  • 路径:从根节点找到某一节点的路线

 

树的种类

无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;

有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;

二叉树:每个节点最多含有两个子树的树称为二叉树;

满二叉树:叶节点除外的所有节点均含有两个子树的树被称为满二叉树

完全二叉树:有2^k-1(k:层级)个节点的满二叉树称为完全二叉树

哈夫曼树(最优二叉树):带权路径最短的二叉树称为哈夫曼树或最优二叉树;

 

树的表达方式

图像表达法

即通过图像的方式直接表达出各节点的关系

符号表达法

用括号先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,而对子树也采用同样的方法处理;同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。如上面树状图可以表示为:( A ( B ( C , D ) , E ( F ) ) )

遍历表达法

前序遍历:先输出父节点,再遍历左子树和右子树。如上面树状图用前序遍历表达为:ABCDEF

中序遍历:先遍历左子树,后输出父节点,再遍历右子树。如上面树状图用中序遍历表达为:CBDAEF

后序遍历:先遍历左子树和右子树,再输出父节点。如上面树状图用后序遍历表达为:CDBFEA

 

为什么要使用树结构?

数组结构

优点:通过下标方式来访问数据,速度快。对于有序数组还可以用二分查找等查找算法来加快速度。

缺点:当向数组中插入或删除数据时,数组需要整体移动,效率较低。

链表结构

优点:插入和删除的效率对比数组结构有很大的提升。如添加时只需直接添加到链表最后,而删除时也只需要移动单个数据即可。

缺点:查找的效率仍然很低。如从链表中查找某个值时,需从链表头开始遍历。

树结构

树结构可以很好提升读取、存储的效率。比如二叉顺序树,即提高了查找的效率,也可以保证添加、删除、修改的速度。

 

 

posted @ 2020-09-30 17:48  小高飞  阅读(242)  评论(0编辑  收藏  举报