/***********************************************
程序:树的存储-----双亲表示法
完成者:小单
完成时间:2013年5月20日
***********************************************/
#include <stdio.h>
#define MAX_TREE_SIZE 100
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int TElemType;
typedef int Status;
typedef struct PTNode //结点结构
{
TElemType data;
int parent; //双亲位置域
}PTNode;
typedef struct //树结构
{
PTNode nodes[MAX_TREE_SIZE];
int n; //树的结点数
}PTree;
Status InitialTree(PTree &T) //树的初始化
{
T.n = 0; //置根的结点数为0
return OK;
}
Status CreateTree(PTree &T)
{
printf("请输入结点数:\n");
scanf("%d",&T.n);
printf("按编号1-n依次输入结点数值及对应的双亲位置(根结点的双亲请用-1表示):\n");
for(int i = 0; i < T.n; ++i)
{
scanf("%d %d",&T.nodes[i].data, &T.nodes[i].parent);
}
return OK;
}
Status FindParentOfNode(PTree &T, TElemType node, TElemType &parent)
{
//求结点node的双亲
for(int i = 0; i < T.n; ++i)
{
if(T.nodes[i].data == node)
{
if(T.nodes[i].parent == -1)
{
return FALSE;//根结点无双亲
}
else
{
parent = T.nodes[i].parent;//找到双亲,用parent带回
return TRUE;
}
}
}
return FALSE; //无此结点返回
}
Status FindChildOfNode(PTree &T, TElemType node)
{
//求结点node的孩子
int count = 0; //记录孩子的个数
for(int i = 0; i < T.n; ++i)
{
if(T.nodes[i].data == node)
{
for(int j = i+1; j < T.n; ++j)//因为我们是按编号1-n的顺序存储的树,所以此时j没必要从0开始
{
if(T.nodes[j].parent == i)
{
++count; //找到一个孩子,孩子个数加1
printf("结点%d的第%d个孩子%d\n", node, count, T.nodes[j]);
}
}
}
}
if(!count)
{
return FALSE;//未找到孩子
}
printf("总共有%d个孩子\n",count);
return TRUE; //找到孩子
}
int main()//测试
{
PTree T;
InitialTree(T);
CreateTree(T);
TElemType parent;
TElemType node;
printf("请输入一个结点:\n");
scanf("%d",&node);
if(FindParentOfNode(T,node,parent))
{
printf("结点%d的双亲为:%d\n",node,parent);
}
printf("\n");
if(!FindChildOfNode(T,node))
{
printf("\n结点%d没有孩子\n",node);
}
return 0;
}
数据结构:树的存储——双亲表示法
原创
©著作权归作者所有:来自51CTO博客作者shanql的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
【数据结构】特殊矩阵的压缩存储
【数据结构】第三章——栈、队列与数组详细介绍特殊矩阵的压缩存储……
数据结构 C语言 矩阵 压缩存储 数组 -
数据结构 树的表示,存储结构与遍历
查找的概念:根据某个
结点 子树 二叉树 -
树的三种表示法:双亲表示法、孩子表示法、孩子兄弟表示法
大佬博客传送门
结点 链表 数据 -
【数据结构笔记17】集合的表示、双亲表示法、并查集、集合的并运算
使用双亲表示法表示一个集合。
集合的表示 双亲表示法 并查集 并运算 结点 -
spring mvc 集成log4j2
SSH+Log4j是比较经典的Web解决方案,它们每一个框架都自成体系,致力于解决不同层次和领域的各种问题,把他们整合在一起可以发挥各自的专长,实现优势功能最大化。每一个框架在设计时就为不同的框架融合预留了解决方法,因此只要方法得当,这些框架是可以完美融合的。hibernate、struts和log4j之间并不存
spring mvc 集成log4j2 hibernate spring struts log4j