//创建二叉树,并对其进行 先序、中序、后序遍历
#include<stdio.h> //
#include<string.h>
typedef struct BiTNode
{
BiTNode(char* name)
{
strcpy(this->name,name);
lchild=NULL;
rchild=NULL;
}
BiTNode* InsertSbOnMyLeft(BiTNode* Sb)
{
this->lchild=Sb;
return Sb;
}
BiTNode* InsertSbOnMyRight(BiTNode* Sb)
{
this->rchild=Sb;
return Sb;
}
char name[256]; // 结点的值
BiTNode *lchild,*rchild; // 左右孩子指针
}BiTNode,*PBiTNode;
void DestroyBiTree(PBiTNode T)
{ // 初始条件:二叉树T存在。操作结果:销毁二叉树T
if(T) // 非空树
{ DestroyBiTree(T->lchild); // 递归销毁左子树,如无左子树,则不执行任何操作
DestroyBiTree(T->rchild); // 递归销毁右子树,如无右子树,则不执行任何操作
delete T; // 释放根结点
}
}
void PreOrderTraverse(PBiTNode T)
{
if(T) // T不空
{ printf("%s ",T->name); // 先访问根结点
PreOrderTraverse(T->lchild); // 再先序遍历左子树
PreOrderTraverse(T->rchild); // 最后先序遍历右子树
}
}
void InOrderTraverse(PBiTNode T)
{
if(T)
{ InOrderTraverse(T->lchild); // 先中序遍历左子树
printf("%s ",T->name); // 访问根结点
InOrderTraverse(T->rchild); // 最后中序遍历右子树
}
}
void PostOrderTraverse(PBiTNode T)
{
if(T) // T不空
{ PostOrderTraverse(T->lchild); // 先后序遍历左子树
PostOrderTraverse(T->rchild); // 再后序遍历右子树
printf("%s ",T->name); // 访问根结点
}
}
void main()
{
PBiTNode T=NULL,tmpNode=NULL;
T=new BiTNode("zhao");
tmpNode=T->InsertSbOnMyLeft(new BiTNode("qian"));
PBiTNode l,r;
l=tmpNode->InsertSbOnMyLeft(new BiTNode("shun"));
r=tmpNode->InsertSbOnMyRight(new BiTNode("Li"));
tmpNode=T->InsertSbOnMyRight(new BiTNode("zhou"));
l=tmpNode->InsertSbOnMyLeft(new BiTNode("wu"));
r=tmpNode->InsertSbOnMyRight(new BiTNode("Zheng"));
r->InsertSbOnMyLeft(new BiTNode("Wang"));
printf("先序递归遍历二叉树:\n");
PreOrderTraverse(T); // 先序递归遍历二叉树T
printf("\n中序递归遍历二叉树:\n");
InOrderTraverse(T); // 中序递归遍历二叉树T
printf("\n后序递归遍历二叉树:\n");
PostOrderTraverse(T); // 后序递归遍历二叉树T
}
创建二叉树,并对其进行 先序、中序、后序遍历
最新推荐文章于 2018-08-23 16:26:49 发布