zoukankan      html  css  js  c++  java
  • 《算法导论》第12章 二叉查找树 (3)基数树


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

  • 相关阅读:
    PopupWindow设置动画效果
    android判断是否含有某权限
    每日一更提醒
    利用Pattern和Mather来禁止特殊字符的输入
    Android毛玻璃处理代码(Blur)
    how to render html tag
    数组
    复杂度分析
    书写markdown的利器
    cannot insert multiple commands into a prepared statement问题原因及解决办法
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157851.html
Copyright © 2011-2022 走看看