数据结构实验(C语言):树

文章参考过网上的内容,如有侵权,请联系

#include
#include

typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;  //左右孩子指针
}BiTNode,*BiTree;

int CreateBiTree(BiTree &T){
    //按先序次序输入二叉树中结点的值(一个字符),空格字符表示空数
    //构造二叉链表表示的二叉树T
    char ch;
    scanf("%c",&ch);
    if(ch==' ') T=NULL;
    else
    {
        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))  exit(-1);
        T->data=ch;  //生成根节点
        CreateBiTree(T->lchild);  //生成左节点
        CreateBiTree(T->rchild);  //构造右子树
    }
    return 1;
}//CreateBiTree

int PreOrderTraverse(BiTree T){
   //二叉树的先序遍历以及输出
   if(T)
   {
       printf("%c ",T->data);  //访问根节点
       PreOrderTraverse(T->lchild);  //访问右孩子
       PreOrderTraverse(T->rchild);  //访问左孩子
   }

   return 1;
}

int InOrderTraverse(BiTree T)
{  //二叉树的中序遍历

    if(T)
    {
        InOrderTraverse(T->lchild); //访问左孩子
        printf("%c ",T->data);  //访问根节点
        InOrderTraverse(T->rchild);  //访问右孩子
    }

}

int GetHeight(BiTree T)
{
    int flagl=0,flagr=0;
    if(!T) return 0;
    else
    {
      flagl=GetHeight(T->lchild);
      flagr=GetHeight(T->rchild);
    }
    return (flagl>flagr?(flagl+1):(flagr+1));
}

int Getleaf(BiTree T)
{
    if(!T) return 0;
    if(!(T->lchild)&&!(T->rchild))
    {
        return 1;
     }
    return (Getleaf(T->lchild)+Getleaf(T->rchild));
}

int PostOrderTraverse(BiTree T)
{
    if(T)
    {
        PostOrderTraverse(T->lchild);  //访问左孩子
        PostOrderTraverse(T->rchild);  //访问右孩子
        printf("%c ",T->data);  //访问根节点

    }

    return 1;
}

int ChangeBiTree(BiTree T)
{
    BiTNode *n;
    n=T->lchild; T->lchild=T->rchild;  T->rchild=n; //交换子树
    PreOrderTraverse(T);
}

int main()
{

    BiTree T;
    printf("---菜单---\n");
    printf("1.创建二叉树   2.先序遍历及输出   3.中序遍历及输出   4.后序遍历及输出\n");
    printf("5.二叉树高度   6.二叉树叶子节点数   7.交换二叉树左右子树\n");
    printf("---1---(先序输入)\n");
    CreateBiTree(T);
    printf("---2---\n");
    PreOrderTraverse(T);
    printf("\n遍历成功\n");
    printf("---3---\n");
    InOrderTraverse(T);
    printf("\n遍历成功\n");
    printf("---4---\n");
    PostOrderTraverse(T);
    printf("\n遍历成功\n");
    printf("---5---\n");
    printf("二叉树高度为:%d\n",GetHeight(T));
    printf("---6---\n");
    printf("叶子节点数为:%d\n",Getleaf(T));
    printf("---7---\n");
    printf("转换后先序输出:\n");
    ChangeBiTree(T);
}

你可能感兴趣的:(课程实验)