树结点的简单练习
#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; }