关闭

数据结构之二叉树

标签: 数据结构
134人阅读 评论(0) 收藏 举报
分类:

《C程序设计语言》中“统计输入中所有单词出现次数”的程序,采用二叉树数据结构,理解代码实现过程并不顺畅,故梳理一下过程。递归函数理解起来费劲,不过通过一个例子去看整个过程,会容易理解些。

每个不同的单词在树中都是一个节点,每个节点包括四个数据:
1.一个指向该单词内容的指针(注意存储的是地址,单词的内容放在另一个区域)
2.一个统计出现次数的计数值
3.一个指向左子树的指针
4.一个指向右子树的指针
这里写图片描述
如何实现将新的单词加入树中?从数的顶层(即树的根进入),要进入树的根、则需要知道根的地址。所以这个函数有两个参数、第一个是节点的地址、第二个是单词的地址。这个节点的内容可能是空的,因此要考虑这个情况,然后就是考虑单词在节点左边、右边、或此节点上。另外,当一个空的节点存入单词时,申请了一块内存存入新的内容,当然要把这块内存的地址返回赋值给原来空的节点。

struct tnode {
     char *word;
     int count;
     struct tnode* left;
     struct tnode* right;
};
struct tnode* addtree(struct tnode* p, char* w )
{  int cond;

    if(p == NULL)
     {  p = talloc();
        p->word = strdup(w);
        p->count = 1;
        p->left = NULL;
        p->right = NULL;
     }
     else if( (cond = strcmp(p->word, w))==0 )
        p->count++;
     else if( cond < 0)
       p->left =  addtree(p->left,w);
     else
       p->right = addtree(p->right,w);

     return p;
}

这里写图片描述

理解了这个代码后,发现二叉树数据结构和递归函数简直是完美配合。函数的第一层就是根结点、第n次递归到了第n层。随着节点的增多,新加入的单词需要多次递归才能到它的位置上。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4532次
    • 积分:176
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章存档