家谱管理
一、问题描述
设计一个程序,采用二叉树表示一个家谱关系。
二、基本要求
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;
}