// 孩子兄弟表示法实际就是创建一棵二叉树 #include#include #include typedef char DataType; typedef struct TNode { DataType data; // 数据域 struct TNode * fchild; // 第一个孩子指针域 struct TNode * rsibling; // 右兄弟指针域 }*Tree; int n = 0; void Creat_Tree(Tree * T); // 建立树(类似建立二叉树) bool Search_Node(Tree T, char temp); // 搜查某个结点以及它的兄弟结点 void PreOrder_Traverse(Tree T); // 前序遍历 void InOrder_Traverse(Tree T); // 中序遍历 void PostOrder_Traverse(Tree T); // 后序遍历 int main() { Tree T; printf("请输入根结点:"); Creat_Tree(&T); Search_Node(T, 'C'); printf("n先序遍历:"); PreOrder_Traverse(T); printf("n"); return 0; } // 防止产生空指针异常 void Creat_Tree(Tree * T) { char ch; scanf("%c",&ch); fflush(stdin); if(ch == '#') { *T = NULL; return; } else { *T = (Tree)malloc(sizeof(struct TNode)); (*T)->data = ch; n++; printf("请输入%c的第一个孩子:", ch); Creat_Tree(&(*T)->fchild); printf("请输入%c的右兄弟:", ch); Creat_Tree(&(*T)->rsibling); } } bool Search_Node(Tree T, char temp) { if(!T) return false; if(T->data == temp) { if(T->rsibling != NULL) { Tree p = T->rsibling; printf("n查找成功!n"); printf("查找的结点:%cn",temp); printf("%c的右兄弟:%cn",temp,p->data); return true; } else { printf("nn抱歉!查找失败n"); return false; } } Search_Node(T->fchild, temp); Search_Node(T->rsibling, temp); } void PreOrder_Traverse(Tree T) { if(!T) return; else { printf("%3c",T->data); PreOrder_Traverse(T->fchild); PreOrder_Traverse(T->rsibling); } }



