`
he91_com
  • 浏览: 378565 次
文章分类
社区版块
存档分类
最新评论

数据结构之 二叉树

 
阅读更多

头文件 BTree.h

#ifndef BTREE_H
#define BTREE_H
#include <iostream>
#include <queue>
using namespace std;

template<class T>                                     //树节点类
class BNode
{
public:
    BNode<T>():left(NULL),right(NULL),data(T()){}
    BNode<T> *left;
    BNode<T> *right;
    T data;
};


template<class T>                                     //二叉树类
class BTree
{
public:
    BNode<T> *root;
    BTree<T>():root(NULL){}
    ~BTree<T>()
    {
        DestoryBTree(root);
    }
    void CreateBTree(BNode<T>* &mBTree);              //构造二叉树
    void PreorderDisplay(BNode<T>* &mBTree);          //前序遍历
    void InorderDisplay(BNode<T>* &mBTree);           //中序遍历
    void PostorderDisplay(BNode<T>* &mBTree);         //后序遍历
    void LevelorderDisplay(BNode<T>* &mBTree);        //层次遍历
    void DestoryBTree(BNode<T>* &mBTree);             //毁灭二叉树
};

template<class T>
void BTree<T>::CreateBTree(BNode<T> *&mBTree)
{
    BNode<T> *tmpNode=new BNode<T>();
    cout<<"Input:\t";
    cin>>tmpNode->data;

    if(tmpNode->data=="#")
    {
        delete tmpNode;
        mBTree=NULL;
        return;
    }
    mBTree=tmpNode;
    CreateBTree(mBTree->left);
    CreateBTree(mBTree->right);
}

template<class T>
void BTree<T>::PreorderDisplay(BNode<T> *&mBTree)     //前序遍历
{
    if(mBTree)
    {
        cout<<mBTree->data<<" ";
        PreorderDisplay(mBTree->left);
        PreorderDisplay(mBTree->right);
    }
}

template<class T>
void BTree<T>::InorderDisplay(BNode<T> *&mBTree)      //中序遍历
{
    if(mBTree)
    {
        InorderDisplay(mBTree->left);
        cout<<mBTree->data<<" ";
        InorderDisplay(mBTree->right);
    }
}

template<class T>
void BTree<T>::PostorderDisplay(BNode<T> *&mBTree)    //后序遍历
{
    if(mBTree)
    {
        PostorderDisplay(mBTree->left);
        PostorderDisplay(mBTree->right);
        cout<<mBTree->data<<" ";
    }
}

template<class T>
void BTree<T>::LevelorderDisplay(BNode<T> *&mBTree)   //层次遍历
{
    if(mBTree)
    {
        BNode<T> *p=NULL;
        queue<BNode<T> *>BNodeQueue;
        BNodeQueue.push(mBTree);
        while(!BNodeQueue.empty())
        {
            p=BNodeQueue.front();
            cout<<p->data<<" ";
            BNodeQueue.pop();
            if(p->left)
                BNodeQueue.push(p->left);
            if(p->right)
                BNodeQueue.push(p->right);
        }
    }
}

template<class T>
void BTree<T>::DestoryBTree(BNode<T> *&mBTree)        //毁灭二叉树
{
    if(mBTree)
    {
        DestoryBTree(mBTree->left);
        DestoryBTree(mBTree->right);
        delete mBTree;
    }

}

#endif // BTREE_H


主函数 main.cpp

#include <iostream>
#include "BTree.h"
using namespace std;

int main()
{
    cout<<"Create A BinaryTree Now :"<<endl;
    BTree<string> mBTree;
    mBTree.CreateBTree(mBTree.root);

    cout<<endl<<"PreorderDisplay"<<endl;
    mBTree.PreorderDisplay(mBTree.root);

    cout<<endl<<"InorderDisplay"<<endl;
    mBTree.InorderDisplay(mBTree.root);

    cout<<endl<<"PostorderDisplay"<<endl;
    mBTree.PostorderDisplay(mBTree.root);

    cout<<endl<<"LevelorderDisplay"<<endl;
    mBTree.LevelorderDisplay(mBTree.root);

    return 0;
}

结果


持续更新。

转载请注明出处!


分享到:
评论

相关推荐

    数据结构之二叉树

    数据结构中关于二叉树的前序遍历,中序遍历,层序遍历

    数据结构之二叉树【很好】

    数据结构之二叉树的详细讲解, 很丰富详细

    C#语言实现数据结构之二叉树

    C#语言实现数据结构之二叉树 在数据结构中,二叉树是一种非常重要的非线性聚合树种的一种。在下面的内容中,作者将通过C#语言去描述这样的数据结构。 目录: 1. 二叉树的基础知识 2. C#实现二叉树原理 3. 实现...

    数据结构之二叉树PPT学习教案.pptx

    数据结构之二叉树PPT学习教案.pptx

    编程数据结构之二叉树讲义

    这是一份我上课的课件,有详细的二叉树教学,对学习数据结构的人帮助很大

    数据结构之二叉树链表.rar

    基于vs环境下实现了数据结构之二叉树链表形式,将原有的利用数组存储二叉树进行了改进,能够利用指针进行修改。可以进行插入和删除节点操作,以及对二叉树进行前中后序遍历。

    数据结构之二叉树实验

    /*1、建立二叉树; 2、实现该二叉树的先序遍历、中序遍历和后序遍历递归算法,输出各遍历序列; 3、统计出该二叉树中叶子结点个数; 4、实现该二叉树的中序遍历非递归算法; 5、实现交换该二叉树所有结点左右...

    数据结构之二叉树的C++实现源码

    本文件为用C++实现二叉树的源码,对于刚接触二叉树学习的同学会有一定的帮助。我是觉得,如果我的知识能给急于补充的你带来帮助,将会是我最大的乐趣。

    c语言数据结构之二叉树实验

    1、参考P66建立二叉树的算法,建立图4-13(a)所示二叉树; 2、实现对该二叉树的先、中、后序遍历并输出遍历序列; 3、实现该二叉树的中序遍历非递归算法; 4、实现对该二叉树交换其左右子女的算法。

    数据结构之二叉树的遍历

    数据结构算法基础,二叉树遍历的所有详细代码,更深更清晰的理解。

    数据结构之二叉树ppt

    讲解非常详细,而且很容易理解!!!,并且在课件的后面还附加了课题,可以让你对上面的内容跟熟练。

    C语言数据结构实现二叉树的建立与遍历.cpp

    C语言数据结构实现二叉树的建立与遍历.cpp

    数据结构之二叉树.rar

    利用数组实现对二叉树的操作,例如,插入删除,遍历操作。用C++实现,具有面向对象的思想,代码简单易懂。

    数据结构之二叉树c语言代码

    一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点...

    数据结构 树 二叉树

    数据结构 树 二叉树 数据结构 树 二叉树 数据结构 树 二叉树

    数据结构实验-二叉树的基本操作

    一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制...1、构造二叉树的二叉链表数据结构。 2、实现二叉树的创建、复制、计算二叉树的深度、先根序序列、中根序序列、后根序序列等操作。

    数据结构之二叉树-思路清晰纯C

    二叉树的创建 二叉树的层次遍历 二叉树的非递归遍历 线索二叉树的实现 二叉排序树的实现 平衡二叉树的实现 哈夫曼树的实现 内容学习于 ...

    JavaScript数据结构之二叉树的查找算法示例

    本文实例讲述了JavaScript数据结构之二叉树的查找算法。分享给大家供大家参考,具体如下: 前面文章介绍了二叉树的遍历,现在谈谈在二叉树中进行查找。对二叉查找树来说,一般有以下三类查找:最大值,最小值和给定...

    数据结构 线索二叉树 严蔚敏

    数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏

Global site tag (gtag.js) - Google Analytics