二叉樹的創建及中序遍歷

頭文件

#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED

#define OVERFLOW -2
#define OK 1


typedef char TElementType;
typedef int Status;


typedef struct BiTNode{
TElementType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*Bitree;

Status InOrderTraverse(Bitree T, Status(*visit)(TElementType e));
Status CreateBitree(Bitree &T);
Status PrintElement(TElementType e);

#endif // HEAD_H_INCLUDED

.cpp文件

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

Status InOrderTraverse(Bitree T, Status(*PrintElement)(TElementType e)){ //中序遍歷
if (T)
{
    InOrderTraverse(T->lchild,PrintElement);
    PrintElement(T->data);
    InOrderTraverse(T->rchild,PrintElement);
}
}

//------------我是華麗麗的分割線----------------

Status CreateBitree(Bitree &T)//讀入字符並創建二叉樹
{
    TElementType ch;
    scanf("%c",&ch);
    if(ch=='#') {T=NULL;}
    else
    {
        if(!(T=(BiTNode *)malloc (sizeof(BiTNode)))) exit(OVERFLOW);
        T->data=ch;
        CreateBitree(T->lchild);
        CreateBitree(T->rchild);
    }
    return OK;
}

//------------我是華麗麗的分割線----------------

Status PrintElement(TElementType e)//打印數據
{
    if (e!='#')
    {
        printf("%c\t",e);
    }
    return OK;
}

主函數

#include<stdlib.h>
#include<stdio.h>
#include"head.h"
Status a;
Bitree T;
int main()
{
    printf("開始構建完全二叉樹,方法:先序遍歷法。\n請按正確順序完整輸入數據,以井號鍵結束\n");
    a=CreateBitree(T);
    if (a) printf("創建二叉樹完成\n");
    printf("開始以中序遍歷法打印二叉樹\n");
    InOrderTraverse(T,PrintElement);
    printf("\n打印完畢,程序結束\n");
    return 0;
}


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