二叉树的遍历(前序,中序,后序)以及求二叉树的深度
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiNode,*BiTree;
BiTree CreateBiTree(){
BiTree T;
char c;
scanf("%c",&c);
if ('#'== c){
T = NULL;
}
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data = c;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;
}
visit(char data){
printf("%c",data);
}
//先序遍历//
PreOrderTraverse(BiTree T){
if(T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历//
InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}
//后序遍历//
PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}
//计算二叉树的深度//
int Depth(BiTree T)
{
int m,n;
if(T==NULL) return 0;
else{
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n) return(m+1);
else return(n+1);
}
}
int main(){
BiTree T;
T = CreateBiTree();
printf("先序遍历二叉树:");
PreOrderTraverse(T);
printf("中序遍历二叉树:");
InOrderTraverse(T);
printf("后序遍历二叉树:");
PostOrderTraverse(T);
printf("二叉树的深度:");
printf("%d",Depth(T));
return 0;
}