大家好,这是小弟的第一篇博客,开篇先贴出自己实现的二叉树算法(完整代码和注释),本人亲自测试过,如果亲发现任何问题,可以拍砖,呵呵。。。贴源码:
1 #include <stdio.h> 2 #include <malloc.h> // malloc(); 3 #include <stdlib.h> //exit(); 4 5 //定义二叉树的链式存储结构 6 typedef struct BiTNode 7 { 8 char data; 9 BiTNode *lchild,*rchild; 10 } *BiTree; 11 12 //构造二叉树,输入例子:ABC DE G F //截止3个空格,空格代表空树 13 bool CreateBiTree(BiTree &T) 14 { 15 char ch; 16 scanf("%c",&ch); 17 if (ch==' ') T = NULL; 18 else 19 { 20 T = (BiTNode *)malloc(sizeof(BiTNode)); 21 if(!T) exit(-1); 22 T->data = ch; 23 CreateBiTree(T->lchild); 24 CreateBiTree(T->rchild); 25 } 26 return true; 27 } 28 29 bool PrintValue(char data) 30 { 31 printf("%c",data); 32 33 return true; 34 } 35 36 //先序遍历二叉树,Visit为指针函数,调用定义的函数 37 bool PreOrderTraverse(BiTree &T,bool (* Visit)(char data)) 38 { 39 if(T) 40 { 41 if(!Visit(T->data)) return false; 42 PreOrderTraverse(T->lchild,Visit); 43 PreOrderTraverse(T->rchild,Visit); 44 } 45 return true; 46 } 47 48 //中序遍历二叉树,Visit为指针函数,调用定义的函数 49 bool InOrderTraverse(BiTree &T,bool (* Visit)(char data)) 50 { 51 if(T) 52 { 53 InOrderTraverse(T->lchild,Visit); 54 if(!Visit(T->data)) return false; 55 InOrderTraverse(T->rchild,Visit);
56 } 57 return true; 58 } 59 60 //后序遍历二叉树,Visit为指针函数,调用定义的函数 61 bool LastOrderTraverse(BiTree &T,bool (* Visit)(char data)) 62 { 63 if(T) 64 { 65 LastOrderTraverse(T->lchild,Visit); 66 LastOrderTraverse(T->rchild,Visit); 67 if (!Visit(T->data)) return false; 68 } 69 return true; 70 } 71 72 int main(void) 73 { 74 75 76 printf("请输入构造二叉树的数据域:\n"); 77 BiTree p; 78 CreateBiTree(p); 79 printf("采用先序遍历输出结果:\n"); 80 PreOrderTraverse(p,PrintValue); 81 printf("\n"); 82 83 printf("采用中序遍历输出结果:\n"); 84 InOrderTraverse(p,PrintValue); 85 printf("\n"); 86 87 printf("采用后序遍历输出结果:\n"); 88 LastOrderTraverse(p,PrintValue); 89 printf("\n"); 90 91 system("pause"); //控制台暂停 92 93 return 0; 94 } 95 // 输入例子:ABC DE G F //截止3个空格,空格代表空树 96 /* Output: 97 先序遍历:ABCDEGF 98 中序遍历:CBEGDFA 99 后序遍历:CGEFDBA 100 */
浙公网安备 33010602011771号