树的存储结构
【方法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; //指针域,分别指向第一个还结点和下一个兄弟结点。 }
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。