标签:style blog http io ar color os sp on
1 #include <stdio.h> 2 #include <stdlib.h> 3 //*****二叉树的二叉链表存储表示*****// 4 typedef struct BiNode 5 { 6 char data; 7 struct BiNode *lchild, *rchild; 8 }BiNode, *BiTree; 9 10 //*****按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树构造二叉链表表示的二叉树T*****// 11 void CreateBiTree(BiTree &T) 12 { 13 char ch; 14 scanf("%c", &ch); 15 if(ch == ‘ ‘) 16 { 17 T = NULL; 18 } 19 else 20 { 21 if(!(T = (BiNode *)malloc(sizeof(BiNode)))) 22 { 23 return; 24 } 25 T->data = ch; //生成根结点 26 CreateBiTree(T->lchild); //构造左子树 27 CreateBiTree(T->rchild); //构造右子树 28 } 29 30 return; 31 } 32 33 //*****先序遍历二叉树*****// 34 void PreOrderTraverse(BiTree T) 35 { 36 if(!T) 37 { 38 return; //若T为空树,则直接返回 39 } 40 printf("%c ", T->data); //访问根结点 41 PreOrderTraverse(T->lchild); //先序遍历左子树 42 PreOrderTraverse(T->rchild); //先序遍历右子树 43 44 return; 45 } 46 47 //*****中序遍历二叉树*****// 48 void InOrderTraverse(BiTree T) 49 { 50 if(!T) 51 { 52 return; //若T为空树,则直接返回 53 } 54 InOrderTraverse(T->lchild); //中序遍历左子树 55 printf("%c ", T->data); //访问根结点 56 InOrderTraverse(T->rchild); //中序遍历右子树 57 58 return; 59 } 60 61 //*****后序遍历二叉树*****// 62 void PostOrderTraverse(BiTree T) 63 { 64 if(!T) 65 { 66 return; //若T为空树,则直接返回 67 } 68 PostOrderTraverse(T->lchild); //后序遍历左子树 69 PostOrderTraverse(T->rchild); //后序遍历右子树 70 printf("%c ", T->data); //访问根结点 71 72 return; 73 } 74 75 int main(void) 76 { 77 BiTree T; 78 printf("请按先序次序输入二叉树中结点的值(字符),空格字符表示空树:\n"); 79 CreateBiTree(T); 80 81 printf("先序遍历结果为:"); 82 PreOrderTraverse(T); 83 printf("\n\n"); 84 85 printf("中序遍历结果为:"); 86 InOrderTraverse(T); 87 printf("\n\n"); 88 89 printf("后序遍历结果为:"); 90 PostOrderTraverse(T); 91 printf("\n\n"); 92 93 return 0; 94 }
以如下二叉树为例,给出按先序次序输入二叉树中结点的值(字符),从而按照本文给出的算法构造二叉树。
输入字符的顺序是:-+a空格空格*b空格空格-c空格空格d空格空格/e空格空格f空格空格,即可验证本文提供的遍历算法。
标签:style blog http io ar color os sp on
原文地址:http://www.cnblogs.com/mengwang024/p/4148196.html