#数据结构:家谱管理

家谱管理

一、问题描述

设计一个程序,采用二叉树表示一个家谱关系。

二、基本要求

1) 用缩进表示法输出家谱二叉树。

2) 查找某人所有的儿子。

3) 查找某人所有的祖先。

三、算法思想

二叉树的建立,遍历,查询,插入(判断、右插入或左插入)

四、数据结构

typedef struct Node

{

    char data;

    int flag; //标志位 (0代表未被访问,1代表被访问)

    struct Node* lchild;

    struct Node* rbrother;

}SLNode;

五、模块划分

(1)typedef struct Node定义结构体并重新命名

(2)void Initiate结构体初始化

(3)SLNode* Insertright从右插入

(4)SLNode* Insertleft从左插入

(5)void input输入家谱内的相关信息

(6)void PrintTree打印家谱(二叉树)

(7)void Searchchild寻找孩子

(8)void SearchAncestor寻找祖先

(9)int main主函数,构建菜单并调用多个函数实现其功能

六、源程序

#include<stdio.h>

#include<stdlib.h>

typedef struct Node

{

    char data;

    int flag; //标志位 (0代表未被访问,1代表被访问)

    struct Node* lchild;

    struct Node* rbrother;

}SLNode;

//全局变量p 用来存储儿子结点地址,使其不会因为递归而改变

SLNode* p;

void Initiate(SLNode** T)

{

    *T = (SLNode*)malloc(sizeof(SLNode));

    (*T)->lchild = NULL;

    (*T)->rbrother = NULL;

}

  • 2
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值