您的位置:首页 > 其它

树结点的简单练习

2016-04-14 16:29 309 查看
   #include "stdio.h"
#include "stdlib.h"
#define MAX 30
typedef char DataType;
typedef struct Node{
DataType data;      /* 数据信息字段 */
int parent;          /* 双亲位置字段,以双亲结点在数组中的下标来表示 */
}PTypeNode;
typedef struct Tree{
PTypeNode nodes[MAX];
int n;              /* 树的结点数目 */
}PTypeTree;

//根据树t,输出结点x的父结点与子结点
void ParentChild(PTypeTree t,DataType x){
int i,parent=-2,posi;
for(i=0;i<t.n;i++){
if(t.nodes[i].data==x){//判断是否由此结点
parent=t.nodes[i].parent;//是,保存此结点的父结点位置
if(parent==-1)         //是否根结点
printf("此结点%c为根节点\n",x);//是
else //否,则输出此结点的父结点
printf("此结点%c的父结点为%c\n",x,t.nodes[parent]);
break;//找到结点,则退出循环,不用继续再找了
}
}
if(i==t.n){ //是否找到结点x,循环到最后,则表示没找到
printf("无此结点%c数据\n\n",x);return; //没找到
}
posi=i;//保存x结点位置
printf("此结点%c的孩子结点为",x);
for(i=0;i<t.n;i++){//循环寻找x结点的孩子结点

if(t.nodes[i].parent==posi)
printf("%c ",t.nodes[i].data);
}

printf("\n\n");
}   
int main(int argc, char* argv[])
{
           



             
PTypeTree tree;
tree.n=10;
tree.nodes[0].data='A';


  tree.nodes[1].data='B'; tree.nodes[2].data='C'; tree.nodes[3].data='D'; tree.nodes[4].data='G'; tree.nodes[5].data='H'; tree.nodes[6].data='J'; tree.nodes[7].data='E'; tree.nodes[8].data='F'; tree.nodes[9].data='I'; tree.nodes[0].parent=-1; tree.nodes[1].parent=0; tree.nodes[2].parent=0; tree.nodes[3].parent=1; tree.nodes[4].parent=1; tree.nodes[5].parent=2; tree.nodes[6].parent=2; tree.nodes[7].parent=4; tree.nodes[8].parent=4; tree.nodes[9].parent=4; char c[20]; while(true){ printf("输入结点数据:"); scanf("%s",c); if(c[0]=='0') break; //if(c=='\n') continue; ParentChild(tree,c[0]); } return 0; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: