二叉树的实现

来源:互联网 发布:福州广电网络电视电话 编辑:程序博客网 时间:2024/06/15 19:41

    说明:使用Qt Creator完成 所以输入输出使用了Qt类。

               二叉树的构建是按照前序顺序构建。

              以字符#表示当前分支的递归结束

              实现了前序、中序、后序遍历

              提供了一些基本二叉树操作。

              创建与删除结点交由BiTree统一管理,不提供对外接口


BiTree.h
struct BiNode{    char data;    BiNode *Lnode,*Rnode;};class BiTree{public:    explicit BiTree();    ~BiTree();    //二叉树遍历    void preOrder(BiNode *root);    void inOrder(BiNode *root);    void postOrder(BiNode *root);    //二叉树常用操作    BiNode *getRoot();    bool isEmpty();    char getValue(BiNode *node);    void setValue(BiNode *node,char val);private:    BiNode *createBiTree();    void deleteBiTree(BiNode *root); //创建和删除节点全部交由BiTree统一管理,不提供对外的接口    BiNode *m_root=nullptr;  //根节点指针。通过该指针可以实现二叉树内存释放 以及二叉树的遍历};

BiTree.cpp

<span style="font-size:14px;">#include "bitree.h"#include <QVector>#include <QDebug>BiTree::BiTree(){  m_root=createBiTree();}BiTree::~BiTree(){    deleteBiTree(m_root);}BiNode *BiTree::createBiTree(){    QTextStream in(stdin);    char ch;    in>>ch;        BiNode *node;        if(ch=='#')            node=nullptr;        else        {            node=new BiNode;            node->data=ch;            qDebug()<<"输入左节点:";            node->Lnode=createBiTree();            qDebug()<<"输入右节点:";            node->Rnode=createBiTree();        }        return node;}BiNode *BiTree::getRoot(){    return m_root;}void BiTree::deleteBiTree(BiNode *root){    if(!root)        return;    else    {        deleteBiTree(root->Lnode);        deleteBiTree(root->Rnode);        delete root;        root=nullptr;    }}void BiTree::preOrder(BiNode *root){    if(!root)        return;    qDebug()<<root->data<<" ";    preOrder(root->Lnode);    preOrder(root->Rnode);}void BiTree::inOrder(BiNode *root){    if(!root)        return;    inOrder(root->Lnode);    qDebug()<<root->data<<" ";    inOrder(root->Rnode);}void BiTree::postOrder(BiNode *root){    if(!root)        return;    postOrder(root->Lnode);    postOrder(root->Rnode);    qDebug()<<root->data<<" ";}bool BiTree::isEmpty(){    if(m_root)        return 1;    else        return 0;}char BiTree::getValue(BiNode *node){    return node->data;}void BiTree::setValue(BiNode *node, char val){    node->data=val;}</span><strong style="font-size: 18px;"></strong>


main.cpp

#include <QCoreApplication>#include <QDebug>#include "bitree.h"int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    qDebug()<<"Input character:";    BiTree biTree;    qDebug()<<"ProOrderTraerse:";    biTree.preOrder(biTree.getRoot());    qDebug()<<"InOrderTraerse:";    biTree.inOrder(biTree.getRoot());    qDebug()<<"PostOrderTraerse:";    biTree.postOrder(biTree.getRoot());    return a.exec();}




       

1 0
原创粉丝点击