C預言的二叉樹的創建和三種遍歷方式

下面是糾結了好久完成的,還是沒有完全理解樹的概念所致:

#include <stdio.h>
#include <stdlib.h>

typedef  struct BiTNode{
         char data;
         struct BiTNode *lchild,*rchild;
         }BiTNode,*BiTree;
         
BiTree  Creat(BiTree p);
void preorder(BiTree p);
void inorder(BiTree p);
void postorder(BiTree p);

int main()
{
    BiTree T;
    T = Creat(T);
    
    preorder(T);
    printf("\n");
    
    inorder(T);
    printf("\n");
    
    postorder(T);
    printf("\n");
    
    system("pause");
    return 0;
}

BiTree Creat(BiTree p)//創建二叉樹 
{
       char ch;
       ch = getchar();//在輸入的時候,由於創建時是按照先序的,所以輸入時應該按先序輸入 
              
       if(ch == '#')
             p = NULL;
       else
       {
           if(!(p = (BiTNode *)malloc(sizeof(BiTNode))))
                  printf("Error!\n");
           p->data = ch;
           p->lchild = Creat(p->lchild);
           p->rchild = Creat(p->rchild);
       }
       
       return p;
}

void preorder(BiTree p)// 先序遍歷
{
     if(p)
     {
          printf("%c",p->data);
          preorder(p->lchild);
          preorder(p->rchild);
     }
}

void inorder(BiTree p)// 中序遍歷 
{
     if(p)
     {
          inorder(p->lchild);
          printf("%c",p->data);
          inorder(p->rchild);
     }
}

void postorder(BiTree p)// 後序遍歷 
{
     if(p)
     {
          postorder(p->lchild);
          postorder(p->rchild);
          printf("%c",p->data);
     }
}
    


自己學會建立二叉樹,否則在輸入時無法正常輸出,我剛開始就煩了這樣的錯……

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章