二叉树的前序中序后序遍历(C语言描述)
此二叉树前序输入为
AB#D##C##
前序输出为 ABDC
中序输出为 BDAC
后序输出为 DBCA
一、定义二叉树的存储结构
一个二叉树有一个数据域和两个指针域
代码如下
typedef struct BiTNode { char data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree;二、创建一个二叉树(前序递归方法创建二叉树)
三、前序遍历一个二叉树void CreateBiTree(BiTree *T) { char x; scanf("%c",&x); if(x=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BiTNode)); (*T)->data=x; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } }
依次访问二叉树 根结点->左孩子->右孩子
四、中序遍历二叉树void PreOrderTraverse(BiTree T) { if(T==NULL) return; printf("%c ",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); }
依次访问二叉树 左孩子->根结点->右孩子
void MiOrderTraverse(BiTree T) { if(T==NULL) return; MiOrderTraverse(T->lchild); printf("%c ",T->data); MiOrderTraverse(T->rchild); }
}五、后序遍历二叉树
依次访问二叉树 左孩子->右孩子->根结点
六、最后是主函数,输出前中后序遍历结果void BackOrderTraverse(BiTree T) { if(T==NULL) return; BackOrderTraverse(T->lchild); BackOrderTraverse(T->rchild); printf("%c ",T->data); }
最后完整代码如下int main() { printf("先序方式输入一棵二叉树:"); BiTree T; CreateBiTree(&T); printf("先序方式遍历结果:\n"); PreOrderTraverse(T); printf("\n"); printf("中序方式遍历结果:\n"); MiOrderTraverse(T); printf("\n"); printf("后序方式遍历结果:\n"); BackOrderTraverse(T); printf("\n"); return 0; }
#include<stdio.h> #include<stdlib.h> typedef struct BiTNode { char data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree *T) { char x; scanf("%c",&x); if(x=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BiTNode)); (*T)->data=x; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } } void PreOrderTraverse(BiTree T) { if(T==NULL) return; printf("%c ",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } void MiOrderTraverse(BiTree T) { if(T==NULL) return; MiOrderTraverse(T->lchild); printf("%c ",T->data); MiOrderTraverse(T->rchild); } void BackOrderTraverse(BiTree T) { if(T==NULL) return; BackOrderTraverse(T->lchild); BackOrderTraverse(T->rchild); printf("%c ",T->data); } int main() { printf("先序方式输入一棵二叉树:"); BiTree T; CreateBiTree(&T); printf("先序方式遍历结果:\n"); PreOrderTraverse(T); printf("\n"); printf("中序方式遍历结果:\n"); MiOrderTraverse(T); printf("\n"); printf("后序方式遍历结果:\n"); BackOrderTraverse(T); printf("\n"); return 0; }/*AB#D##C##前序输出为 ABDC中序输出为 BDAC后序输出为 DBCA*/