实验五——二叉树

2018-05-15  本文已影响0人  林之禾

按照下面二叉树二叉链表的存储表示,编写头文件binary_tree.h,实现二叉链表的定义与基本操作实现函数;编写主函数文件验证该头文件中各个操作。

二叉树二叉链表存储表示如下:
typedef struct BiTNode {
     TElemType  data ;
     struct BiTNode  *lchild , *rchild ;
}BiTNode,*BiTree ;
基本操作如下:
①void InitBiTree(BiTree &T )  
//初始化二叉树T 
②void CreateBiTree(BiTree &T) 
//按先序遍历序列建立二叉链表T     
③bool BiTreeEmpty (BiTree T);         
//检查二叉树T是否为空,空返回1,否则返回0 
④int BiTreeDepth(BiTree T);
//求二叉树T的深度并返回该值                       
⑤void PreOrderTraverse (BiTree T);    
//先序遍历二叉树T
⑥void InOrderTraverse (BiTree T);
//中序遍历二叉树T
⑦void PostOrderTraverse (BiTree T);  
//后序遍历二叉树T
⑧void DestroyBiTree(BiTree &T)       
//销毁二叉树T   
//二叉树结构
typedef struct BiTNode {
     TElemType  data ;
     struct BiTNode  *lchild , *rchild ;
}BiTNode,*BiTree ;
class Tree {
public:
    BiTree node;
    Status InitBiTree(BiTree &T);
    Status CreateBiTree(BiTree &T, char *str);
    bool BiTreeEmpty(BiTree T);
    int BiTreeDepth(BiTree T);
    Status PreOrderTraverse(BiTree T);
    Status InOrderTraverse(BiTree T);
    Status PostOrderTraverse(BiTree T);
    Status DestroyBiTree(BiTree &T);
};
//初始化二叉树T
Status Tree::InitBiTree(BiTree &T) {
    T = NULL;
    return OK;
}
//按先序遍历序列建立二叉链表T
static int i = 0;
Status Tree::CreateBiTree(BiTree &T, char *str) {
    TElemType c;

    c = *(str + i++);
    //printf("%s\n", str);
    //printf("%d%c\n", i,c);
    //i=++i;
    if (c == '#') {
        T = NULL;
    } else {
        //BiTNode *T=new BiTNode;
        T=new BiTNode;
        //T = (BiTree) malloc(sizeof(BiTNode));
        if (!T) {
            return ERROR;
        }

        T->data = c;
        CreateBiTree(T->lchild, str);
        CreateBiTree(T->rchild, str);
    }
    if (i == strlen(str))
        i = 0;
}
//检查二叉树T是否为空,空返回1,否则返回0
bool Tree::BiTreeEmpty(BiTree T) {
    if (!T) {
        return false;
    } else {
        return true;
    }
}
//求二叉树T的深度并返回该值
int Tree::BiTreeDepth(BiTree T) {
    int i, j;
    if (!T) {
        return ERROR;
    }
    if (T->lchild) {
        i = BiTreeDepth(T->lchild);
    } else {
        i = 0;
    }
    if (T->rchild) {
        j = BiTreeDepth(T->rchild);
    } else {
        j = 0;
    }
    return i > j ? i + 1 : j + 1;
}
//先序遍历二叉树T
Status Tree::PreOrderTraverse(BiTree T) {
    if (!T) {
        return OK;
    }
    visit(T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
    return OK;
}
//中序遍历二叉树T
Status Tree::InOrderTraverse(BiTree T) {
    if (!T) {
        return OK;
    }

    InOrderTraverse(T->lchild);
    visit(T->data);
    InOrderTraverse(T->rchild);
    return OK;
}
//后序遍历二叉树T
Status Tree::PostOrderTraverse(BiTree T) {
    if (!T) {
        return OK;
    }

    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    visit(T->data);
    return OK;
}
//销毁二叉树T
Status Tree::DestroyBiTree(BiTree &T) {
    if (T) {
        if (T->lchild) {
            DestroyBiTree(T->lchild);
        }
        if (T->rchild) {
            DestroyBiTree(T->rchild);
        }
        free(T);
        //T=NULL;
        return OK;
    }
}


上一篇下一篇

猜你喜欢

热点阅读