《算法导论》第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 举报

相关文章推荐

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

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

《算法导论》第12章 二叉查找树 (2)查找、插入与删除

1. 查找 利用二叉查找树左小右大的性质,可以很容易实现查找任意值和最大/小值。 BSTNode * bst_search(BSTNode *node, int key) { ...
  • dc_726
  • dc_726
  • 2012-03-25 11:48
  • 6505

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

RadixTree(基数树)

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

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

基数树与二叉查找树和Trie树很相似。它像BST一样是二叉的,向左表示0而不是BST的小于, 而向右则表示1而不是大于。它像Trie一样共享相同的结点来保存字符串中相同的前缀,从而 节省了空间,但...
  • dc_726
  • dc_726
  • 2012-03-25 13:38
  • 5741

二叉查找树 (算法导论12)

查找树(search tree)是一种数据结构,它支持多种集合操作,包括SEARCH,MINIMUM,MAXIMUM,PREDECESSOR,SUCCESSOR,INSERT和DELETE。 ...

《算法导论》第12章 二叉查找树 (1)遍历

二叉查找树的效率 在二叉查找树中执行的基本操作的时间与树的高度成正比。最坏情况, 树的高度是N,像链表一样,而较好情况高度是lgN。因此,树的高度是关键。 下一章将要学习的红黑树是对二叉...
  • dc_726
  • dc_726
  • 2012-03-24 22:49
  • 2521

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

摘要:   本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二...

算法导论-第12章-二叉搜索(查找)树

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

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

二叉查找树是一种树数据结构,它与普通的二叉树最大的不同就是二叉查找树满足一个性质:对于树中的任意一个节点,均有其左子树中的所有节点的关键字值都不大于该节点的关键字值,其右子树中的任意一个节点的关键字值...

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

二叉查找树的概念和性质        二叉查找树(Binary Search Tree)是这样的一棵树:设节点x的左右孩子分别为y,z,那么key[x] = key[x],而它的以y和z分别为根的左右...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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