《算法导论》第12章 二叉查找树 (3)基数树

原创 2012年03月25日 13:38:00

基数树与二叉查找树和Trie树很相似。它像BST一样是二叉的,向左表示0而不是BST的小于,
而向右则表示1而不是大于。它像Trie一样共享相同的结点来保存字符串中相同的前缀,从而
节省了空间,但它不像Trie那样每个结点有很多孩子(可以是26个,表示a到z),它用来处理
只包含0和1的字符串。



基数树和Trie都用来保存和排列字符串,那么现在来看看字典序,关于字典序有两条规则:

1. 字符串长度相同时,从左向右逐个字符比较。如011 < 100。

2. 字符串长度不同时,长度长的在字典序中值更大。如100 < 1011。

因此,根结点 < 左子树结点 < 右子树结点。

#include <stdio.h>
#include <stdlib.h>

typedef struct RadixNode {
     struct RadixNode *lchild, *rchild;
     char *str;
} RadixNode;

void radix_insert(RadixNode *node, char *str)
{
     int i;
     for (i = 0; str[i] != '\0'; i++) {               
          if (str[i] == '0') {
               if (node->lchild == NULL)
                    node->lchild = calloc(sizeof(RadixNode), 1);
               node = node->lchild;               
          } 
          else {
               if (node->rchild == NULL)
                    node->rchild = calloc(sizeof(RadixNode), 1);
               node = node->rchild;
          }               
     }
     node->str = str;
}

void radix_preorder_walk(RadixNode *node)
{
     if (node != NULL) {
          if (node->str != NULL)
               printf("%s\n", node->str);
          radix_preorder_walk(node->lchild);
          radix_preorder_walk(node->rchild);
     }
}

int main(void)
{
     RadixNode *root = malloc(sizeof(RadixNode));
     radix_insert(root, "1011");
     radix_insert(root, "10");
     radix_insert(root, "011");
     radix_insert(root, "100");
     radix_insert(root, "0");
     
     radix_preorder_walk(root);

     return 1;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问 http://blog.csdn.net/dc_726

相关文章推荐

查找——图文翔解RadixTree(基数树)

基数树 对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。 radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我们可...

【数据结构】基数树

本节研究基数树相关的机制和实现;

基数树(radix tree)

原文 基数(radix)树 Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数...

菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t

基数树(radix tree)是一种不怎么常见的数据结构,这里简单的做一下介绍:在计算机科学中,基数树,是一种基于trie(字典树)的特殊的数据结构,可以快速定位叶子结点。radix tree是一种多...

字典树/trie树,基数树/radix树

转自:百度百科:http://baike.baidu.com/view/2759664.htm

RadixTree(基数树)

1. 基数树概述 对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。 radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我...

中心缓存:CentralCache

1.CentralCache的实现 定义: static CentralFreeListPadded central_cache_[kNumClasses]; 每个数组元素对应一种size clas...

分布式存储--Mysql--序列2--索引的设计策略

索引设计一直是Mysql存储的核心部分,本篇将详细介绍设计索引过程中,要注意的一些基本策略。在线计算转化成离线计算,减少索引个数在通常用户量不是很大的系统中,我们会把C端的用户系统和内部用的运营系统混...

算法导论 第12章 二叉查找树

一、概念 1.定义与性质 (1)设x为二叉查找树中的一个结点,若y是x左子树中的一个结点,则key[y] (2)二叉查找树上执行的基本操作的时间与树的高度成正比。 2.结构 (1)结点结构: 关键字...

《算法导论》读书笔记之第12章 二叉查找树

摘要:   本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《算法导论》第12章 二叉查找树 (3)基数树
举报原因:
原因补充:

(最多只允许输入30个字)