计算机科学中的树:二叉排序树、自平衡二叉查找树、B树、Trie、空间划分树、非二叉树、(堆、散列树。。。)
(一)二叉排序树(BinarySearchTree):
1,二叉排序树(Binary Sort Tree)又称二叉查找树。
2,它或者是一棵空树;或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(一)自平衡二叉查找树:
1,平衡二叉树,又称AVL树。
2,它或者是一棵空树,或者是具有下列性质的二叉树:
(1)它的左子树和右子树都是平衡二叉树;
(2)左子树和右子树的高度之差之差的绝对值不超过1.
1,红黑树是一种自平衡二叉查找树.
典型的用途是实现关联数组。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
2,红黑树是一种很有意思的平衡检索树。
它的统计性能要好于平衡二叉树(AVL-树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。
3,红黑树的每个节点上的属性除了有一个key、3个指针:parent、lchild、rchild以外,还多了一个属性:color。它只能是两种颜色:红或黑。而红黑树除了具有二叉搜索树的所有性质之外,还具有以下4点性质:
(1). 根节点是黑色的。
(2). 空节点是黑色的(红黑树中,根节点的parent以及所有叶节点lchild、rchild都不指向NULL,而是指向一个定义好的空节点)。
(3). 红色节点的父、左子、右子节点都是黑色。
(4). 在任何一棵子树中,每一条从根节点向下走到空节点的路径上包含的黑色节点数量都相同。
(关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。JavaScript的对象本质就是一个关联数组。)
(二)B树:
B树是存储排序数据并允许以O(logn)的运行时间进行查找,顺序读取、插入和删除的数据结构,与自平衡二叉查找树不同,B树为系统最优化大块数据的读写操作,B树算法减少定位记录时经历的中间过程,从而加速存取,普遍用在数据库和文件系统中。
一个m阶B树是一颗平衡的m路搜索树,深度为m。它或者是空树,或者满足下面性质:
1、根结点至少有两个子女;
2、每个非根结点所包含的关键字个数j满足:[m/2]-1<=j<=m-1
3、除根节点以外的所有结点(不包括叶子结点)的度正好是关键字总数加1,故内部子树个数k满足:[m/2]<=j<=m;
4、所有的叶子结点都位于同一层。
与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文件系统。