数据结构——树(三)(2022考研)

树的存储结构

双亲表示法

#include "stdio.h"
#include "stdlib.h"

#define ElemType int
#define MAX_SIZE 100

typedef struct {
    ElemType data;
    int parent;
}PTNode;
typedef struct {
    PTNode nodes[MAX_SIZE];
    int n;
}PTree;

孩子表示法

#include "stdio.h"
#include "stdlib.h"

#define ElemType int
#define MAX_SIZE 100

struct KTNode{
    int child;
    struct KTNode *next;
};
typedef struct {
    ElemType data;
    struct KTNode *firstChild;
}KTBox;
typedef struct {
    KTBox nodes[MAX_SIZE];
    int n,r;
}KTree;

孩子兄弟表示法

#include "stdio.h"
#include "stdlib.h"

#define ElemType int

typedef struct CSNode{
    ElemType data;
    struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;

在这里插入图片描述

//习题5.5---查找孩子兄弟表示法的叶子结点数
int Leaves(CSTree T){
    if(T==NULL)
        return 0;
    if(T->firstchild==NULL)
        return 1+ Leaves(T->nextsibling);
    else
        return Leaves(T->firstchild)+ Leaves(T->nextsibling);
}

//习题5.6---计算树的深度
int Height(CSTree T){
    int hc,hs;
    if(T==NULL)
        return 0;
    else{
        hc= Height(T->firstchild);
        hs= Height(T->nextsibling);
        if(hc+1>hs)
            return hc+1;
        else
            return hs;
    }
}

//习题5.7---构造孩子兄弟链表
void CreateCSTree(CSTree &T,ElemType e[],int degree[],int n){
    CSNode *pointer=new CSNode[15];
    int i,j,d,k=0;
    for(i=0;i<n;i++){
        pointer[i].data=e[i];
        pointer[i].firstchild=pointer[i].nextsibling=NULL;
    }
    for(i=0;i<n;i++){
        d=degree[i];
        if(d){
            k++;
            pointer[i].firstchild=pointer[k];
            for(j=2;j<=d;j++){
                k++;
                pointer[k-1].nextsibling=pointer[k];
            }
        }
    }
    T=pointer[0];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值