【数据结构八】树

本文详细介绍了数组、链表和哈希表三种数据结构的优缺点。数组提供高效的下标访问,但插入删除操作效率低;链表在插入删除上有优势,查找效率却较低;哈希表则在查找、插入和删除上表现出色,但空间利用率不高且元素无序。此外,文章还简单提及了树的基本概念和术语,强调了树在表示一对多关系中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的优点:根据下标值访问效率会很高。
数组的缺点。在插入和删除数据时,需要进行大量的位移操作,效率很低;根据元素来查找,需要进行线性查找,效率就会比较低,比较好的方式是先对数组进行排序,生成有序数组,再进行二分查找,才能提高查找效率。

链表的优点:插入和删除操作效率都很高。
链表的缺点:查找效率很低,需要从头部或者尾部开始依次访问链表中的每个数据项,直到找到;即使插入和删除操作效率很高,但是如果要插入和删除中间位置的元素的话,还是需要从头或尾先找到对应的数据。

哈希表的优点:插入、查询和删除效率都很高。
哈希表的缺点:空间利用率不高,底层使用的数组,并且某些单元是没有被利用的;哈希表中的元素是无序的,不能按照固定的顺序来遍历哈希表中的元素;不能快速地找出哈希表中的最大值或者最小值这些特殊的值。

树是由 n 个节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,它是根朝上,而叶朝下的。

树结构是非线性的,可以表示一对多的关系。

生活中的树:

公司的组织架构:请添加图片描述
家谱:
请添加图片描述

树的术语:

  1. 树:是由 n 个节点组成的一个具有层次关系的结合。当 n = 0 时,称为空树;当 n > 0 时,称为非空树。
    子树:对于任意一颗非空树,除了根节点外的其余节点可分为 m 个互不相交的有限集 T1、T2…Tm,其中每个集合本身又是一棵树,称为原来树的子树。
    森林:m 棵互不相交的树的集合称为森林。
  2. 树的度:树的所有节点中最大的度数。
    节点的度:一个节点含有的子树的个数。
  3. 树的深度:树中所有节点中的最大层次。
    节点的层次:根节点的层次为 1,根的子节点的层次为 2,以此类推。
  4. 路径:从节点 A 到节点 H 的路径为一个节点序列 A、B、D、H。
    路径长度:路径所包含的边的个数,从节点 A 到节点 H 的路径长度为 3。
    边:节点 A 到节点 B 之间的这条线就称为边。
  5. 根节点:没有父节点的节点称为根节点。
    叶子节点:度为 0 的节点。
    父节点:若一个节点含有子节点,则这个节点就是其子节点的父节点。
    子节点:一个节点含有的子树的根节点称为该节点的子节点。
    祖先节点:从根节点到该节点所经分支上的所有节点。
    子孙节点:以某节点为根的子树中的任一节点都是该节点的子孙节点。
    兄弟节点:具有同一父节点的各节点彼此是兄弟节点。
    堂兄弟节点:父节点在同一层次的节点互为堂兄弟节点。

在这里插入图片描述

树的表示方法:

  1. 普通的表示方法:每个节点中包含节点自身和它的子节点。由于子节点的个数不确定,导致这种存储方式内部的属性不确定。不推荐。
    Node D:
    this.data = data
    this.leftChild = H
    this.rightChild = J
    this.middleChild = I
    ... // 如果还有其他子节点,需要接着存储进来
    
    请添加图片描述
  2. 儿子-兄弟表示法:每个节点中包含节点自身、它的左子节点和它的右兄弟节点。推荐。
    Node C:
    this.data = data
    this.leftChild = G
    this.rightSibling = D
    
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值