Trie树 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。Trie树与二叉搜索树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀(prefix),也就是这个节点对应...
分类:
其他好文 时间:
2015-06-16 12:50:07
阅读次数:
150
给定二叉查找树中的两个节点,求它们的最近公共祖先(Lowest Common Ancestor - LCA)。
在详细介绍之前,可以先参考下这篇文章"二叉树(70) - 最近公共祖先[1]"
函数原型定义如下:
Node *getLCA(Node* root, int n1, int n2)
其中n1和n2是指定的两个节点值。
例如, 上述BST中,10和1...
分类:
其他好文 时间:
2015-06-16 01:22:54
阅读次数:
201
在前一篇文章中,讨论了二叉查找树的查找以及插入操作。本篇文章主要讨论删除操作。
当删除一个节点时,可能包含下面的这些情形:
1) 被删节点为叶子:
这种情况下,简单的将叶子删除即可。
50 50
/ \ delete(2...
分类:
其他好文 时间:
2015-06-16 01:22:47
阅读次数:
122
假设树的节点定义如下,查找一个指定值的前驱以及后继节点。如果树中没有找到指定值,则返回它所在区间的边界值。
struct
Node
{
int
key;
Node *left,*right ;
};
下面是实现此操作的算法,采用递归:
输入: 根节点, 键值
输出: 前驱节点,后继节点
1. If root is NUL...
分类:
其他好文 时间:
2015-06-16 01:22:37
阅读次数:
161
查找最小值的操作是很简单的,只需要从根节点递归的遍历到左子树节点即可。当遍历到节点的左孩子为NULL时,则这个节点就是树的最小值。
上面的树中, 从根节点20开始,递归遍历左子树,直到为NULL。因为节点4的左子树为NULL,则4就是树的最小值。
代码实现查找最小值:
Node * minValueNode(Node* node)
{
Node* current...
分类:
其他好文 时间:
2015-06-16 01:22:10
阅读次数:
177
在本系列的第一篇文章中,已经介绍过了二叉查找树的一些性质:
节点的左子树中任意节点值小于根节点节点的右子树中任意节点值大于根节点左右子树都必须是二叉查找树,不允许存在重复节点。
基于上面的这些性质,自然的就得到了这种判断方式:树中的每个节点都有一个特定的值。
假设树的节点定义为:
struct Node
{
int key;
Node...
分类:
其他好文 时间:
2015-06-16 01:21:58
阅读次数:
119
在WikiPedia中,对二叉查找树的定义如下:
二叉查找树,是一种基于节点的二叉树,有下面的性质:
节点的左子树中任意节点值小于根节点;
节点的右子树中任意节点值大于根节点;
左右子树都必须是二叉查找树,不允许存在重复节点。
二叉查找树的上述性质,保证了各节点值的顺序,这样进行查找,求最大值最小值时,会效率更高。如果没有这种顺序,则可能需要树中的将每个节点与指定的查找值进行比较。...
分类:
其他好文 时间:
2015-06-15 23:57:34
阅读次数:
180
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.题解完全抄自ref的说明,感谢!“题解:先复习下什么是二叉搜索树(引自Wikipedia):二叉查找树(B...
分类:
其他好文 时间:
2015-06-10 06:33:38
阅读次数:
112
AVL树:带有平衡条件的二叉查找树,即一棵AVL树是其每个节点的左子树和右子树的高度最多相差1的二叉查找树。一般通过Single Rotate和Double Rotate来保持AVL树的平衡。AVL树的实现如下:1) Single Rotate2)Double Rotate1) Single Rot...
分类:
其他好文 时间:
2015-06-09 21:33:58
阅读次数:
136