头文件 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#语言去描述这样的数据结构。 目录: 1. 二叉树的基础知识 2. C#实现二叉树原理 3. 实现...
数据结构之二叉树PPT学习教案.pptx
这是一份我上课的课件,有详细的二叉树教学,对学习数据结构的人帮助很大
基于vs环境下实现了数据结构之二叉树链表形式,将原有的利用数组存储二叉树进行了改进,能够利用指针进行修改。可以进行插入和删除节点操作,以及对二叉树进行前中后序遍历。
/*1、建立二叉树; 2、实现该二叉树的先序遍历、中序遍历和后序遍历递归算法,输出各遍历序列; 3、统计出该二叉树中叶子结点个数; 4、实现该二叉树的中序遍历非递归算法; 5、实现交换该二叉树所有结点左右...
本文件为用C++实现二叉树的源码,对于刚接触二叉树学习的同学会有一定的帮助。我是觉得,如果我的知识能给急于补充的你带来帮助,将会是我最大的乐趣。
1、参考P66建立二叉树的算法,建立图4-13(a)所示二叉树; 2、实现对该二叉树的先、中、后序遍历并输出遍历序列; 3、实现该二叉树的中序遍历非递归算法; 4、实现对该二叉树交换其左右子女的算法。
数据结构算法基础,二叉树遍历的所有详细代码,更深更清晰的理解。
讲解非常详细,而且很容易理解!!!,并且在课件的后面还附加了课题,可以让你对上面的内容跟熟练。
C语言数据结构实现二叉树的建立与遍历.cpp
利用数组实现对二叉树的操作,例如,插入删除,遍历操作。用C++实现,具有面向对象的思想,代码简单易懂。
一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点...
数据结构 树 二叉树 数据结构 树 二叉树 数据结构 树 二叉树
一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制...1、构造二叉树的二叉链表数据结构。 2、实现二叉树的创建、复制、计算二叉树的深度、先根序序列、中根序序列、后根序序列等操作。
二叉树的创建 二叉树的层次遍历 二叉树的非递归遍历 线索二叉树的实现 二叉排序树的实现 平衡二叉树的实现 哈夫曼树的实现 内容学习于 ...
本文实例讲述了JavaScript数据结构之二叉树的查找算法。分享给大家供大家参考,具体如下: 前面文章介绍了二叉树的遍历,现在谈谈在二叉树中进行查找。对二叉查找树来说,一般有以下三类查找:最大值,最小值和给定...
数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏 数据结构 线索二叉树 严蔚敏