#递归
递归的关键在于终止条件与状态的转移,此代码的终止条件是输入字符为'#',状态转移就是左右子树遍历到最后的节点
#完整代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+10;
typedef struct BitNode
{
char data; //数据域
struct BitNode *lchild,*rchild; //左右孩子指针
}BitNode, *BiTree;
//创建树
BiTree CreatBitree(){
BiTree T;
char c;
scanf("%c",&c);
if(c=='#')T=NULL;
else
{
T=(BiTree)malloc(sizeof(BitNode));
T->data=c;
T->lchild=CreatBitree();
T->rchild=CreatBitree();
}
return T;
}
void visit (char data)
{
printf("%c ",data);
}
//先序
void PreDrderTraverse(BiTree T)
{
if(T)
{
visit(T->data);
PreDrderTraverse(T->lchild);
PreDrderTraverse(T->rchild);
}
}
//中序
void MidDrderTraverse(BiTree T)
{
if(T)
{
MidDrderTraverse(T->lchild);
visit(T->data);
MidDrderTraverse(T->rchild);
}
}
//后序
void LastDrderTraverse(BiTree T)
{
if(T)
{
LastDrderTraverse(T->lchild);
LastDrderTraverse(T->rchild);
visit(T->data);
}
}
//树的深度
int DeepTree(BiTree T)
{
int lenl,lenr;
if(T==NULL) return 0;
else
{
lenl=DeepTree(T->lchild);
lenr=DeepTree(T->rchild);
if(lenl>lenr)return lenl+1;
else return lenr+1;
}
}
int main(){
BiTree T;
T=CreatBitree();
printf("输出先、中、后序序列:\n");
PreDrderTraverse(T);
printf("\n");
MidDrderTraverse(T);
printf("\n");
LastDrderTraverse(T);
printf("\n树的深度为:\n");
printf("%d\n",DeepTree(T));
return 0;
}