算法10---二叉搜索树之基数树

算法10---二叉搜索树之基数树

基数树是用来保存和排列字符串,关于字典序有两条规则:
 
算法导论中给出这样的图,我们结合图来看
 
1. 当字符串长度相同时,从左向右逐个字符比较,左边的比右边的小。如011 < 100。
 
2. 字符串长度不同时,长度长的在字典序中值更大。如100 < 1011。
 
因此,根结点 < 左子树结点 < 右子树结点;所以我们会用到先序遍历;
 
我们在基数树中存储位串1011,10,011,100和0;
 
 
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct RadixNode {
 5      struct RadixNode *lchild, *rchild;
 6      char *str;
 7 } RadixNode;
 8 
 9 void radix_insert(RadixNode *node, char *str)
10 {
11      int i;
12      for (i = 0; str[i] != '\0'; i++) 
13      {               
14           if (str[i] == '0')
15           {
16                if (node->lchild == NULL)
17                     node->lchild = (RadixNode *)calloc(sizeof(RadixNode), 1);
18                node = node->lchild;               
19           } 
20           else 
21           {
22                if (node->rchild == NULL)
23                     node->rchild = (RadixNode *)calloc(sizeof(RadixNode), 1);
24                node = node->rchild;
25           }               
26      }
27      node->str = str;
28 }
29 
30 void radix_preorder_walk(RadixNode *node)
31 {
32      if (node != NULL) {
33           if (node->str != NULL)
34                printf("%s\n", node->str);
35           radix_preorder_walk(node->lchild);
36           radix_preorder_walk(node->rchild);
37      }
38 }
39 
40 int main()
41 {
42      RadixNode *root = (RadixNode *)malloc(sizeof(RadixNode));
43      radix_insert(root, "1011");
44      radix_insert(root, "10");
45      radix_insert(root, "011");
46      radix_insert(root, "100");
47      radix_insert(root, "0");
48      
49      radix_preorder_walk(root);
50 
51      return 0;
52 }

 

 

转载于:https://www.cnblogs.com/tao-alex/p/5913830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值