数据结构->二叉树的基本操作

1、 按先序次序输入二叉树中结点的值(一个字符),`@`表示空树,生成二叉树的二叉链表存储结构。

2、 按先、中、后序递归遍历二叉树,之后结合栈的应用,将中序遍历算法改为非递归算法。

3、利用二叉树的递归算法求二叉树的高度 。

4、利用二叉树的递归算法求二叉树的叶子个数。

5、编写一个主函数,调试上述算法。

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node
{
    ElemType data;
    struct Node *lchild,*rchild;
} BTNode,*BiTree;
int m=0,n=0;
BiTree creat()
{
    BiTree T;
    ElemType data;
    scanf("%c",&data);
    if(data=='@')
        T=NULL ;
    else
    {
        T=(BiTree)malloc(sizeof(BTNode));
        T->data=data;
        T->lchild=creat();
        T->rchild=creat();
    }
    return T;
}
void bianli1(BiTree T)
{
    if(T)
    {
        printf("%c",T->data);
        bianli1(T->lchild);
        bianli1(T->rchild);
    }
}
void bianli2(BiTree T)
{
    if(T)
    {
        bianli2(T->lchild);
        printf("%c",T->data);
        bianli2(T->rchild);
    }
}
void bianli3(BiTree T)
{
    if(T)
    {
        bianli3(T->lchild);
        bianli3(T->rchild);
        printf("%c",T->data);
    }
}
void fdg(BiTree T)
{
    BTNode tt[1000];
    int top=-1;
    BTNode  *p=T;
    BTNode *q;
    int i=0;
    while(p||top!=-1)
    {
        if(p)
        {
            tt[++top]=(*p);
            p=p->lchild;
        }
        else
        {
            q=&(tt[top--]);
            printf("%c",q->data);
            p=q->rchild;
        }
    }
}
int yezi(BiTree T)
{

    if(T==NULL) return 0;

   if(T->lchild==NULL&&T->rchild==NULL)
       return 1;

    return (yezi(T->lchild)+yezi(T->rchild));
}
int  height(BiTree T)
{
    if(T==NULL) return 0;
    else
    {
        m=height(T->lchild);
        n=height(T->rchild);
        if(m>n)
            return m+1;
        else
            return n+1;
    }

}
int main()
{
    BiTree T=creat();
    //creat(&T);
    puts("创建成功");
    puts("\n先序遍历");
    bianli1(T);
    puts("\n中序遍历");
    bianli2(T);
    puts("\n后序遍历");
    bianli3(T);
    puts("\n非递归中序遍历");
    fdg(T);
    puts("");
    printf("树的高度为%d\n",height(T));
    printf("树的叶子数为%d\n",yezi(T));
    return 0;
}


猜你喜欢

转载自blog.csdn.net/yangdelu855/article/details/78837520