关闭

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

标签: 算法insertnullstruct
6211人阅读 评论(5) 收藏 举报
分类:

基数树与二叉查找树和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;
}

3
0
查看评论

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

基数树 对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。 radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我们可以实现对于长整型数据类型的路由。利用radix树可以根据一个长整型(比如一个长ID)快速查找到其对应...
  • yang_yulei
  • yang_yulei
  • 2015-06-08 00:10
  • 12004

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

转自:百度百科:http://baike.baidu.com/view/2759664.htm
  • taozhi20084525
  • taozhi20084525
  • 2014-07-21 15:32
  • 1722

基数树(radix tree)

原文 基数(radix)树 Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。 IDR(ID Radix)机制是将对象的身份鉴别号整数值...
  • joker0910
  • joker0910
  • 2012-12-03 05:59
  • 30906

算法导论-12-2-基数树

题目: 给定两个串a = a0a1……ap和b = b0b1……b1,其中每一个ai和每一个bj都属于某个有序字符集,如果下面两条规则之一成立,则说串a按字典序小于串b: 1)存在一个整数j,0 2)p 例如,如果a和b是位串,则根据规则1)(设j=3),有10100 图12-5中示出的...
  • mishifangxiangdefeng
  • mishifangxiangdefeng
  • 2012-07-05 18:50
  • 3957

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

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

算法新解 (刘新宇著) 中文高清完整版PDF 下载

  • 2017-03-16 13:52
  • 5.90MB
  • 下载

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

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

算法导论 第12章 12-2 基数树

算法导论 第12章思考题 基数树 题目   解决思路:         很显然,这是关于二叉查找树的应用,主要是运用插入和遍历。       ...
  • zilingxiyue
  • zilingxiyue
  • 2015-02-01 17:05
  • 545

(p171)基数树

思路很简单,把浅深色的节点设为1,其余的设为0,先序遍历用s存储当前路径对应的字符串,遇到1输出即可 #include #include #include #define max 100 struct node{ int f; struct node *l,*r; }; void insert...
  • u010327109
  • u010327109
  • 2016-02-28 18:28
  • 134

linux 基数树

Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。 IDR(ID Radix)机制是将对象的身份鉴别号整数值ID与对象指针建立关联表,完成从ID与指针之间的...
  • lonewolfxw
  • lonewolfxw
  • 2012-09-07 10:09
  • 2402
    个人资料
    • 访问:3397690次
    • 积分:24524
    • 等级:
    • 排名:第316名
    • 原创:314篇
    • 转载:56篇
    • 译文:3篇
    • 评论:1594条
    博客专栏
    最新评论