用c写算法4[二叉数的构造以及遍历]
题目:给出二叉树的先序序列,构造对应的二叉链表,并写出遍历二叉数的代码
解答:
#include <stdio.h> #include <stdlib.h> #include <string.h> /*Tree.c: implements the datastructure of string in P127*/ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int TElemType; struct BiTNode { TElemType data; struct BiTNode * lchild, * rchild; }; typedef struct BiTNode BiTNode; typedef BiTNode * BiTree; Status CreateBitree(BiTree * T); Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)); Status InOrderTraverse(BiTree T, Status (* Visit)(TElemType e)); Status PostOrderTraverse(BiTree T, Status (* Visit)(TElemType e)); Status LevelOrderTraverse(BiTree T, Status (* Visit)(TElemType e)); Status PrintElement(TElemType e); int main(int argc, char const *argv[]) { BiTree test = NULL; CreateBitree(&test); PreOrderTraverse(test, PrintElement); return 0; } Status CreateBitree(BiTree * T) { char ch; scanf("%c", &ch); if (ch == ' ') *T = NULL; else { if (!(*T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); (*T)->data = ch; CreateBitree(&(*T)->lchild); CreateBitree(&(*T)->rchild); } return OK; } Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)) { if (T) { if (Visit(T->data)) if (PreOrderTraverse(T->lchild, Visit)) if (PreOrderTraverse(T->rchild, Visit)) return OK; return ERROR; } else { return OK; } } Status PrintElement(TElemType e) { printf("%d-->", e); return OK; }
这里给出一个测试的技巧,由于测试时每次都需要输入先序序列,在调试时很不方便,可以通过输入重定向来简化这一步骤,例如,将先序序列写入文件testscase.txt
这样测试时只需要 ./Tree < testcase.txt 即可,这样提高了调试的效率
posted on 2013-03-28 09:39 jiyiyouxin 阅读(256) 评论(0) 收藏 举报
浙公网安备 33010602011771号