您的位置:首页 > 理论基础 > 数据结构算法

数据结构之二叉树

2015-11-17 21:19 253 查看
《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层。随着节点的增多,新加入的单词需要多次递归才能到它的位置上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构