打印

算法之共同讨论的

[复制链接]
1186|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilzb1985|  楼主 | 2014-4-28 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
vivilzb1985|  楼主 | 2014-4-28 22:22 | 只看该作者
三叉树它是二叉树的扩展,结构分为左子树、中子树、右子树。
  性质:
  1、第n层上至多有“3的(n-1)次方”个结点。
  2、高度为h的三叉树至多有“((3的(h-1)次方)-1)/2 ”个结点。

使用特权

评论回复
板凳
vivilzb1985|  楼主 | 2014-4-28 22:22 | 只看该作者
主要用途还是用来处理字符串,对于trie树来说,处理含有全部ascill码的字符串就有压力了,更不用说处理中文串了。

使用特权

评论回复
地板
vivilzb1985|  楼主 | 2014-4-28 22:23 | 只看该作者
现在给大家分享一个关于三叉树的代码的啊,,这个对理解概念的很有帮助的

使用特权

评论回复
5
vivilzb1985|  楼主 | 2014-4-28 22:24 | 只看该作者
#include <cstdio>  
#include <cstring>  
#include <queue>  
  
typedef int Nodelink;  
const int maxn = 1000101;//内存池大小  
Nodelink Node[maxn][3];   //三叉树的节点,预开内存的速度是动态开不可比拟的(TLE了一晚的教训)。  
int cnt[maxn];   //以该节点为结束的字符串的数目。  
char elem[maxn];   //节点保存的字符。  
int top;   //模拟内存池地址  
Nodelink newNode(char ch)  
{  
    top ++;  
    Node[top][0] = Node[top][1] = Node[top][2] = 0;  
    cnt[top] = 0;  
    elem[top] = ch;  
    return top;  
}  
  
void insert(char str[])  
{  
    int len = strlen(str);  
    Nodelink p = 1;  
    for(int i = 0; i < len; i++)  
    {  
        if(!Node[p][2])  
            Node[p][2] = newNode(str[i]);  
        p = Node[p][2];  
        while(elem[p] != str[i])  
        {  
            if(str[i] < elem[p])  
            {  
                if(!Node[p][0]) Node[p][0] = newNode(str[i]);  
                p = Node[p][0];  
            }  
            else   
            {  
                if(!Node[p][1]) Node[p][1] = newNode(str[i]);  
                p = Node[p][1];  
            }  
        }  
    }  
    cnt[p] ++;  
}

使用特权

评论回复
6
vivilzb1985|  楼主 | 2014-4-28 22:24 | 只看该作者
char str[30];  
  
void print(Nodelink p, int len)  
{  
    if(Node[p][0])  
        print(Node[p][0], len);  
    str[len] = elem[p];  
  
    if(cnt[p])  
    {  
        str[len + 1] = '\0';  
        for(int i = 0; i < cnt[p]; i++)  
            printf("%s\n", str);  
    }  
  
    if(Node[p][2])  
        print(Node[p][2], len + 1);  
    if(Node[p][1])  
        print(Node[p][1], len);  
}  

使用特权

评论回复
7
vivilzb1985|  楼主 | 2014-4-28 22:24 | 只看该作者
int main()  
{  
    top = 0;  
    newNode('\0');  
    char str[6][10] = {"she","sir", "sre", "her", "te", "she"};  
    for(int i = 0; i < 6; i++)  
        insert(str[i]);  
    print(Node[1][2], 0);  
}  

使用特权

评论回复
8
shenmu2012| | 2014-5-15 23:06 | 只看该作者
三叉树算法比较新颖的,学习的啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:后来乍到,前辈们多多包涵了啊。。

88

主题

4276

帖子

6

粉丝