数据结构:孩子兄弟表示法

#include<iostream>
using namespace std;

//定义树的结构体
typedef struct CSNode{
    char data; //结点值
    struct CSNode *firstchild, *nextsibling; //指向第一个孩子结点和下一个兄弟结点的指针
}CSNode, *CSTree;

//创建孩子兄弟树
void CreateCSTree(CSTree &T){
    char ch;
    cin >> ch;
    if(ch == '#'){
        T = NULL;
    }
    else{
        T = new CSNode;
        T->data = ch;
        CreateCSTree(T->firstchild);
        CreateCSTree(T->nextsibling);
    }
}

//先序遍历孩子兄弟树
void PreOrderTraverse(CSTree T){
    if(T){
        cout << T->data << " ";
        PreOrderTraverse(T->firstchild);
        PreOrderTraverse(T->nextsibling);
    }
}

//后序遍历孩子兄弟树
void PostOrderTraverse(CSTree T){
    if(T){
        PostOrderTraverse(T->firstchild);
        cout << T->data << " ";
        PostOrderTraverse(T->nextsibling);
    }
}

int main(){
    CSTree T;
    CreateCSTree(T);
    cout << "先序遍历结果为:";
    PreOrderTraverse(T);
    cout << endl;
    cout << "后序遍历结果为:";
    PostOrderTraverse(T);
    cout << endl;
    return 0;
}

孩子兄弟表示法是一种二叉树的存储结构,它使用二叉链表来表示树。每个节点包括三个部分:结点值、指向结点第一个孩子结点的指针,及指向结点下一个兄弟结点的指针。这种表示法可以很好地解决一些树的操作,如遍历、查找等问题。

这个为AI写出看到并不有关所以。不展开

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值