美文网首页
实验五——二叉树

实验五——二叉树

作者: 林之禾 | 来源:发表于2018-05-15 00:04 被阅读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;
    }
}


相关文章

  • 二叉树遍历(递归算法和非递归算法)

    实验三 二叉树遍历(递归算法和非递归算法) 一.实验目的 1.掌握二叉树的存储结构与基本操作 2.掌握二叉树的遍历...

  • 数据结构之树的相关问题

    实验要求 实现二叉树的抽象数据类型 实现二叉树的建立的运算 实现二叉树的遍历运算 实现创建哈夫曼树的算法 实验代码...

  • 实验五——二叉树

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

  • 二叉树——遍历

    一、原理 二、实验 实验1 根据二叉树的先根遍历序列数组信息,写出构建下图的二叉树算法,再采用中根遍历,写出遍历后...

  • 数据结构与算法-二叉树02

    二叉树的定义 二叉树的特点 二叉树的五中基本形态 其他二叉树 斜二叉树 满二叉树 完全二叉树图片.png满二叉树一...

  • 2017-05-28

    实验一 实验二 实验三 实验四 实验五

  • NJUPT【 数据结构实验 】

    实验一,线性表、链接存储 编写程序,完成顺序表的初始化、查找、插入、删除、输出、撤销等操作。 实验二,二叉树、哈夫...

  • 数据结构实验2:二叉树的应用

    实验内容: 1.输入字符序列,建立二叉链表。2.中序遍历二叉树:递归算法。3.中序遍历二叉树:非递归算法。(最好也...

  • 哈夫曼编码

    实验目的: (1) 掌握二叉树的定义; (2) 掌握哈夫曼树和哈夫曼编码算法的实现。 实验内容: 实现一个哈夫曼编...

  • 实验五

    活动图文档 一、 实验链接 实验一:https://www.jianshu.com/p/c30c2ee70d14 ...

网友评论

      本文标题:实验五——二叉树

      本文链接:https://www.haomeiwen.com/subject/vnvsdftx.html