数据结构之二叉树

原创 2015年11月17日 21:19:04

《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层。随着节点的增多,新加入的单词需要多次递归才能到它的位置上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构之二叉树

  • 2015-12-02 14:20
  • 562KB
  • 下载

数据结构之二叉树的线索化

线索二叉树      指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树 lchild ltag data rtag rchild 当ltag 为0 时指...

数据结构之二叉树

二叉树的每个结点至多只有两个孩子节点(不存在度大于2的结点),二叉树的孩子节点有左右之分,次序不能颠倒。

数据结构之二叉树创建及其遍历

还记得N年想在全盘电脑寻找一个文件,当时看那代码晦涩难懂,后来不了了之,最近复习了下二叉树,现在感觉全盘寻找文件不是想象的那么复杂。 #include #include #include type...

数据结构之二叉树的构建c++版

二叉树的构建要注意与链式表的区别,二叉树这里的构建十分低级,每个树只是构建了一个单一的二叉树节点,总体来看是有下向上构建的。用户需要手动去构建自己需要的树,而不是直接去插入数据就到二叉树中了,因为不是...

数据结构之二叉树

二叉树:二叉树是每个节点最多有两个子树的树结构二叉树分两种:顺序结构的二叉树和链式存储的二叉树但前者容易造成空间的浪费,所以适合用于完全二叉树 而二叉树链表就不会出现这样的问题一、二叉树链表结构: ...

数据结构实验之二叉树的遍历

【实验内容】创建一个二叉树,对这棵动态二叉树进行分析,将其用静态二叉链表表示。二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。静态二叉链表是用数组作为存储空间,每...

数据结构之二叉树(C风格)

BiTreeNode.h#pragma oncetemplate class BiTreeNode { private: BiTreeNode * leftChild; BiTreeN...

数据结构之二叉树(附栈实现先序,中序非递归遍历)

#include #include using namespace std; #define STACKSIZE 20 #define SIZEADD 10 typedef char ElemType...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)