当前位置:首页 > C++知识 > 正文内容

树的存储结构

亿万年的星光3年前 (2021-11-27)C++知识20389

【方法1:数组】称为父亲表示法

const int m=10;                 //树的结点数
struct node{ 
    int data,parent;            //数据域,指针域
};
node tree[m];

优缺点:利用了数中除根结点外每个结点都有唯一的父结点这个性质。很容易找到数根。但是找孩子时需要遍历整个线性表。


【方法2:树形单链表结构】称为孩子表示法

每个结点包括一个数据域和一个指针域(指向若干子结点),称为“孩子表示法”。假设数的高度为10,数的结点仅存放字符,则这棵树的数据结构定义如下:

const int m=10;
typedef struct node;
typedef node * tree;
struct node
{
    char data;   //数据域
    tree child[m];  //指针域,指向若干孩子结点
};
tree t;

缺陷:只能从根(父)结点遍历到子结点,不能从某个子结点返回到它的父结点。但程序中确实需要从某个结点返回到它的父结点时,就需要在结点中多定义一个指针变量存放父结点的信息。这种结构又叫做带逆序的树型结构。

【方法3:树形双链表结构】称为父亲孩子表示法

每个结点包括一个数据域和两个指针域(一个指向若干子结点,一个指向父结点)。假设树的度为10,树的结点仅存放字符,则这棵树的数据结构定义如下:

const int m=0;
typedef struct node;
typedef node * tree;  //声明tree是指向node的指向类型
struct node
{
    char data;          //数据域
    tree child[m];      //指针域,指向若干孩子结点
    tree father;        //指针域,指向父结点
};
tree t;

【方法4:二叉树型表示法】称为孩子兄弟表示法

它是一种双链表结构,但每个结点包括一个数据域和一个指针域(一个指向该结点的第一个孩子结点,一个指向该结点的下一个兄弟结点)。假设树的高度为10,树的结点仅存放字符,则这棵树的数据结构定义如下:

typedef struct node;
typedef struct * tree;
struct node
{
    char data;  //数据域
    tree firstchild, next;  //指针域,分别指向第一个还结点和下一个兄弟结点。
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【数据结构】栈—括号匹配检验

【数据结构】栈—括号匹配检验

【题目描述】假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[  (  [  ] [  ] ) ] 等为正确的匹配,[&nbs...

【贪心】区间选点

【贪心】区间选点

【题目描述】数轴上有n个闭区间[ai, bi],取尽量少的点,使得每个区间内都至少有一个点。(不同区间内含的点可以是同一个,1<=n<=10000,1<=ai<=bi<=...

【数据结构】队列—基本概念

【数据结构】队列—基本概念

一、基本定义队列是一种先进先出的线性结构,简称FIFO结构。特点就是“先进先出”二、队列的相关概念队头与队尾:允许元素插入的一端称为队尾,允许元素删除的一端称为队头入队:队列的插入操作出队:队列的删除...

判断闰年

代码参考:#include<iostream>  using namespace std; //判断闰年的函数  int leap(...

CSP-J2021年普及组复赛T3——网络连接

【题目描述】TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个 协议,还原一个简化后的网络连接场景。在本问题中,计算机分为两大类:服务机(Server)和客户机(Clie...

【数据结构】队列—基本操作

【数据结构】队列—基本操作

一、C++实例分析       C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容...