树结点的简单练习

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

 

转载于:https://www.cnblogs.com/jdw513/p/5391619.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值