二叉树遍历的递归算法(C程序,先序中序或后序)
收起
知与谁同
2018-07-19 19:21:10
1853
0
2
条回答
写回答
取消
提交回答
-
那个 答案我用了不行 啊,报错后改了运行没结果
2019-07-17 22:55:47
-
//***********************************************************
//头文件
#include<stdio.h>
#include<stdlib.h>
//***********************************************************
//宏定义
#define OK 1
#define ERROR 0
#define OVERFLOW 0
//***********************************************************
typedef struct BiTNode{
//二叉树二叉链表存储结构
char data;
struct BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
//***********************************************************
int CreateBiTree(BiTree &T){
//按先序次序输入二叉中树结点的值,空格表示空树
//构造二叉链表表示的二叉树T
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch==' ')T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return(OVERFLOW);
T->data=ch;
CreateBiTree(T->lChild);
CreateBiTree(T->rChild);
}
return(OK);
}
//*********************************************************
void PreOrderTraverse(BiTree T){
//采用二叉链表存储结构,先序遍历二叉树的递归算法
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lChild);
PreOrderTraverse(T->rChild);
}
}
/***********************************************************
void InOrderTraverse(BiTree T){
//采用二叉链表存储结构,中序遍历二叉树的递归算法
if(T){
InOrderTraverse(T->lChild);
printf("%c",T->data);
InOrderTraverse(T->rChild);
}
}*/
//***********************************************************
void PostOrderTraverse(BiTree T){
//采用二叉链表存储结构,后序遍历二叉树的递归算法
if(T){
PostOrderTraverse(T->lChild);
PostOrderTraverse(T->rChild);
printf("%c",T->data);
}
}
//***********************************************************
void main(){
//主函数分别实现建立并输出先、中、后序遍历二叉树
BiTNode *Tree;
CreateBiTree(Tree);
printf("\n先序遍历二叉树:");
PreOrderTraverse(Tree);
printf("\n中序遍历二叉树:");
InOrderTraverse(Tree);
printf("\n后序遍历二叉树:");
PostOrderTraverse(Tree);
printf("\n该二叉树的节点个数:%d",BiTreeCount(Tree));
}
2019-07-17 22:55:47