对《大话数据结构》P313~P340—二叉排序树和平衡二叉树,进行了自己的理解并完善了代码。 一、二叉排序树 对如下二叉排序树进行中序遍历,就可以得到有序的序列{35,37,47,51,58,62,73,88,93,99}。 查找: 插入: 删除: 1、删除的是叶子节点 2、删除的结点仅有左孩子或右 ...
分类:
编程语言 时间:
2016-04-27 17:09:26
阅读次数:
164
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note:A solution using O(n) space i ...
分类:
编程语言 时间:
2016-04-20 11:34:36
阅读次数:
127
当用线性表作为表的组织形式时,可以有三种查找法。其中以二分查找效率最高。但由于二分查找要求表中 节点按关键字有序,且不能用链表作存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性, 势必要移动表中很多节点。这时由移动节点引起的额外时间开销,就会抵消二分查找的优点。也就是说, 二分查找只适用 ...
分类:
编程语言 时间:
2016-04-18 11:30:58
阅读次数:
176
二叉搜索树 又称二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不为空,则左子树上所有节点的值均小于它的父节点的值,若它的右字树不为空,则右子树上所有节点的值均大于它的父节点的值,它的左右子树叶分别是二叉排序树。二叉排序树能高效的实现查找,插入,删除。比较复杂的是删除操作后如何 ...
分类:
其他好文 时间:
2016-04-16 21:24:08
阅读次数:
215
一、AVL树简介 AVL树是一种平衡的二叉查找树。 平衡二叉树(AVL 树)是一棵空树,或者是具有下列性质的二叉排序树: 1它的左子树和右子树都是平衡二叉树, 2且左子树和右子树高度之差的绝对值不超过 1。 定义平衡因子(BF)为该结点左子树的高度减去右子树的高度所得的高度差;AVL 树任一结点平衡 ...
分类:
其他好文 时间:
2016-04-14 22:18:21
阅读次数:
141
介绍: 对于二叉排序树而言,其相关操作与树的高度息息相关。设树中有N个节点, 尽管各个操作的平均时间复杂度为O(logN),但当输入的序列有序时,构造出来的树是一个单分支的树,其高度为O(N) 故对二叉排序树的各个操作(如,findMax、contains、findMin...)的时间复杂度也退化成 ...
分类:
编程语言 时间:
2016-04-14 17:30:16
阅读次数:
303
二叉排序树
一棵自平衡的二叉排序树(二叉搜索树)
生成二叉排序树的过程是非常容易失衡的,最坏的情况就是一边倒(只有右/左子树),这样会导致二叉树的检索效率大大降低(O(n))。
为了维持二叉树的平衡,有各种的算法,如:AVL,SBT,伸展树,TREAP ,红黑树等等。
红黑树红黑树需要满足5条性质:
- 节点非红即黑
- 根节点是黑色
- 所有NULL结点称为叶子节点,且...
分类:
其他好文 时间:
2016-04-01 18:08:22
阅读次数:
164
查找算法
基本概念:
(1)关键字:假如有结构
struct Node
//一个结点,存储数据和指针
{
DATA data;
//数据属性,用于存储数据
int key;
//假设key为int值,其在整个表里是唯一的
//指针域,具体略,指向其他结点,或者是数组的下标
};
key值便是关键字,对于每一个结点而言,其key值都是不一样的(不一定必须是int值)...
分类:
编程语言 时间:
2016-03-26 07:16:16
阅读次数:
238
1.定义
对于每个结点,左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1
为什么会出现这样一种树呢?
假如我们按照1-n的顺序插入到二叉排序树中,那么二叉排序树就退化成了一个有序链表,效率大大降低。
2.有关概念
所有平衡树基本由以下三个特征组成:
1.自平衡条件
2.旋转操作
3.旋转的触发
平衡树通过设置合理的自平衡条件,使得二叉排序...
分类:
其他好文 时间:
2016-03-26 07:05:00
阅读次数:
185