先序建立 中序建立 后序建立
先序遍历 中序遍历 后序遍历
求树的深度
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
typedef struct node{
char ch;
struct node *Lchild;
struct node *Rchild;
}BiTNode,*BiTree;
void Q_CreatTree(BiTree *T);
void Z_CreatTree(BiTree *T);
void H_CreatTree(BiTree *T);
void Q_Traverse(BiTree T);
void Z_Traverse(BiTree T);
void H_Traverse(BiTree T);
int TreeDeep(BiTree T);
int main(void)
{
BiTree T;
Q_CreatTree(&T);
//Z_CreatTree(&T);
//H_CreatTree(&T);
Q_Traverse(T);
printf("\n");
Z_Traverse(T);
printf("\n");
H_Traverse(T);
printf("\n");
printf("树的深度:%d\n",TreeDeep(T));
}
void Q_CreatTree(BiTree *T)//前序遍历建立二叉树
{
char a;
a=getchar();
if(a=='^')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->ch=a;
Q_CreatTree( &( (*T)->Lchild ) );
Q_CreatTree( &( (*T)->Rchild ) );
}
}
void Z_CreatTree(BiTree *T)//中序遍历建立二叉树
{
char a;
a=getchar();
if(a=='#')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
Z_CreatTree( &( (*T)->Lchild ) );
(*T)->ch=a;
Z_CreatTree( &( (*T)->Rchild ) );
}
}
void H_CreatTree(BiTree *T)//后序遍历建立二叉树
{
char a;
a=getchar();
if(a=='#')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
H_CreatTree( &( (*T)->Lchild ) );
H_CreatTree( &( (*T)->Rchild ) );
(*T)->ch=a;
}
}
void Q_Traverse(BiTree T)//前序遍历二叉树
{
if(T)
{
printf("%c",T->ch);
Q_Traverse(T->Lchild);
Q_Traverse(T->Rchild);
}
}
void Z_Traverse(BiTree T)//中序遍历二叉树
{
if(T)
{
Z_Traverse(T->Lchild);
printf("%c",T->ch);
Z_Traverse(T->Rchild);
}
}
void H_Traverse(BiTree T)//后序遍历二叉树
{
if(T)
{
H_Traverse(T->Lchild);
H_Traverse(T->Rchild);
printf("%c",T->ch);
}
}
int TreeDeep(BiTree T)//求树的深度
{
int n=0;
if(T)
{
int L=TreeDeep(T->Lchild);
int R=TreeDeep(T->Rchild);
n=L+1>R+1?L+1:R+1;
}
return n;
}