树结点的简单练习

   #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; }

 

posted on 2016-04-14 16:29  说变就变  阅读(242)  评论(0编辑  收藏  举报