树结构和数组/链表/哈希表的对比
数组的优点:
1、数组的主要优点是根据下标值访问效率会很高
2、但是如果我们希望根据元素来查找对应的位置呢?
3、比较好的方式是先对数组进行排序,再进行二分查找
数组的缺点:
1、需要先对数组进行排序,生成有序数组,才能提高查找效率
2、另外数组在插入和删除数据时,需要有大量的位置操作(插入到首位或者中间位置的时候),效率很低
链表的优点:
链表的插入和删除操作效率都很高
链表的缺点:
1、查找效率很低,需要从头依次访问链表中的每个数据项,直到找到
2、而且即使插入和删除操作效率很高,但是如果要插入和删除中间位置的数据,还是需要从头先找到对应的数据
哈希表的优点:
哈希表的插入/查询/删除效率都市非常高的
哈希表的缺点:
1、空间利用率不高,底层使用的是数组,并且某些单元是没有被利用的
2、哈希表中的元素是无序的,不能按照固定的顺序来遍历哈希表中的元素
3、不能快速的找出哈希表中的最大值或者最小值这些特殊的值
树结构:
我们不能说树结构比其他结构都要好,因为每种数据结构都有自己特定的应用场景
但是树确实也综合了上面的数据结构的优点(当然优点不足以盖过其他数据结构,比如效率一般情况下没有哈希表高).并且也弥补了上面数据结构的缺点
而且为了模拟某些场景,我们使用树结构会更加方便
因为树结构是非线性的,可以表示一对多的关系
比如文件的目录结构
树结构的术语
树(Tree): n(n>=0)
个节点构成的有限集合
当n=0
时,称为空树;
对于任一棵非空树(n>0
),它具备以下性质:
树中有一个称为”根(Root
)”的特殊节点,用r表示
其余节点可分为m(m>0)
个互不相交的有限集T1,T2,...,Tm,
其中每个集合本身优势一棵树,称为原来树的”子树(SubTree
)”
树的术语:
1、节点的度(Degree): 节点的子树个数
2、树的度:树的所有结点中最大的度数
3、叶节点(Leaf):度为0的节点(也称为叶子节点)
4、父节点(Parent): 有子树的节点是其子树的根节点的父节点
5、子节点(Child): 若A节点是B节点的父节点,则称B节点是A节点的子节点;子节点也称为孩子节点
6、兄弟节点(Sibling): 具有同一父节点的各节点彼此是兄弟节点
7、路径和路径长度: 从节点n1到nk的路径为一个节点序列n1, n2, … , nk, ni 是 ni+1的父节点.路径所包含边的个数为路径的长度
8、节点的层次:节点的层次(Level):规定根节点在1层,其他任一节点的层数是其父节点的层数加1
9、树的深度(Depth): 树中所有节点中的最大层次是这个树的深度
树结构的表示方式:儿子兄弟表示法.任何一棵树都可以用二叉树模拟出来