(1)编写建立二叉树的算法。
(2)验证二叉树的先序、中序、后序遍历算法
(3)编写二叉树的左右子树交换算法
上面这些都比较简单,程序如下:
#include
#include
typedef struct tree
{
char data;
struct tree *l;/*左儿子*/
struct tree *r;/*右儿子*/
}tr;
/*先序建立二叉树*/
tr *create(tr *t)
{
tr *k=NULL;
char ch;
scanf("%s",&ch);
if(ch=='#')
{
t=NULL;
}
else
{
t=(tr *)malloc(sizeof(tr));
t->data=ch;
t->l=create(k);
t->r=create(k);
}
return t;
}
/*先序遍历*/
void preOrder(tr *t)
{
if(t)
{
printf("%c\t",t->data);
preOrder(t->l);
preOrder(t->r);
}
}
/*中序遍历*/
void inOrder(tr *t)
{
if(t)
{
inOrder(t->l);
printf("%c\t",t->data);
inOrder(t->r);
}
}
/*后序遍历*/
void postOrder(tr *t)
{
if(t)
{
postOrder(t->l);
postOrder(t->r);
printf("%c\t",t->data);
}
}
/*左右子树交换*/
void switchChild(tr *t)
{
if(t)
{
tr *temp;
temp=t->l;
t->l=t->r;
t->r=temp;
switchChild(t->l);
switchChild(t->r);
}
}
main()
{
tr *head=NULL;
head=create(head);
printf("\n The preOrder is:");
preOrder(head);
printf("\n The inOrder is:");
inOrder(head);
printf("\n The postOrder is:");
postOrder(head);
printf("\n");
switchChild(head);
}
层次遍历也不难,但需要用到堆栈。
如果自己写堆栈的操作,也不难,但比较麻烦了。
补充:
已经写的代码,是完全符合的啊。
层次遍历,要用到堆栈,嫌麻烦就没有写了!