数据结构之二叉树

原创 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
  • 下载

《大话数据结构》之二叉树的四种遍历

二叉树的遍历共分四种:前序遍历、中序遍历、后序遍历、层序遍历。 除层序遍历以外,所谓的前序、中序、后序,是按父节点所处位置的不同来划分的。父节点在两个子节点的中间,那就是中序,在两个子节点的前面那就...

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

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

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

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

数据结构之二叉树_BinTree

#ifndef BINTREE_H_INCLUDED #define BINTREE_H_INCLUDED #include #include using std::cin; using ...

SDUT2136数据结构实验之二叉树的建立与遍历

数据结构实验之二叉树的建立与遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述        已知一个按先序序列输入的字符...
  • Q_smell
  • Q_smell
  • 2016年07月22日 21:39
  • 230

数据结构之二叉树的一些基本操作

二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。...

每天一点数据结构之二叉树的插入与创建

每天一点数据结构之二叉树的插入与创建 二叉树的插入: 1.判断树是否为空,如果为空则直接插入当前结点成为根结点 2.若根不为空,则判断是否小于根 3.小于根插入左子树 4.大于根插入右子树 ...

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

还记得N年想在全盘电脑寻找一个文件,当时看那代码晦涩难懂,后来不了了之,最近复习了下二叉树,现在感觉全盘寻找文件不是想象的那么复杂。 #include #include #include type...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构之二叉树
举报原因:
原因补充:

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