1.二叉树的基本运算(30分)
#include <stdio.h>
#include <stdlib.h>
typedef struct node /*二叉树结构定义*/
{
char data;
struct node *lchild,*rchild;
} binnode;
typedef binnode *bintree;
bintree CreateBinTree();/*按前序遍历顺序建立一棵二叉树,返回树根地址 */
void PreOrder(bintree t); /* t为指向树根结点的指针,树的前序遍历*/
void InOrder(bintree t); /* t为指向树根结点的指针,树的中序遍历*/
void PostOrder(bintree t); /* t为指向树根结点的指针,树的后序遍历*/
bintree PreLast(bintree t); /* t为指向树根结点的指针,返回先序遍历的最后一个结点地址,如果树为空,返回NULL*/
bintree PostFirst(bintree t);/* t为指向树根结点的指针,返回后序遍历的第一个结点地址,如果树为空,返回NULL*/
int main()
{
bintree t,p;
t=CreateBinTree(); /*建立二叉树t的存储结构*/
printf("\nthe PreOrder is:");
PreOrder(t);
printf("\nthe InOrder is:");
InOrder(t);
printf("\nthe PostOrder is:");
PostOrder(t);
printf("\nthe PreLast is:");
p=PreLast(t);
if (p==NULL) printf("null");
else printf("%c",p->data);
printf("\nthe PostFirst is:");
p=PostFirst(t);
if (p==NULL) printf("null");
else printf("%c",p->data);
return 0;
}
bintree PostFirst(bintree t)
{
if(t == NULL)
{
return NULL;
}
if(t->lchild)
t = PostFirst(t->lchild);
else if(t->rchild)
t = PostFirst(t->rchild);
else
return t;
}
bintree PreLast(bintree t)
{
if(t == NULL)
{
return NULL;
}
if(t->rchild)
t = PreLast(t->rchild);
else if(t->lchild)
t = PreLast(t->lchild);
else
return t;
}
void PostOrder(bintree t)
{
bintree x = t;
if(x)
{
PostOrder(x->lchild);
PostOrder(x->rchild);
printf("%c",x->data);
}
}
void InOrder(bintree t)
{
bintree x = t;
if(x)
{
InOrder(x->lchild);
printf("%c",x->data);
InOrder(x->rchild);
}
}
void PreOrder(bintree t)
{
bintree x = t;
if(x)
{
printf("%c",x->data);
PreOrder(x->lchild);
PreOrder(x->rchild);
}