二叉数的前序、中序、后续三种方式的递归与非递归的算法.
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/16 00:41:23
二叉数的前序、中序、后续三种方式的递归与非递归的算法.
二叉数的前序、中序、后续三种方式的递归与非递归的算法.
二叉数的前序、中序、后续三种方式的递归与非递归的算法.
小哥分这么少
//二叉树的实现
#include
using namespace std;
//二叉树的节点
template
class btnode
{
public:
btnode()
{
left=right=0;
}
btnode(const T & data)
{
left=right=0;
this->data=data;
}
btnode(const T &data,btnode *l,btnode *r)
{
this->data=data;
left=l;
right=r;
}
btnode *left,*right;
T data;
};
//二叉树
template
class bitree
{
public:
//构造函数
bitree(){root=0;count=0;}
//构造二叉树
bool insert(const T& e);
//判空运算
bool isempty()
{
return 0==root?true:false;
}
//前序遍历递归和非递归版本
void preorder( void(*visit)(btnode*u) );
void preorder_nr( void(*visit)(btnode*u));
//后序遍历
void postorder(void(*visit)(btnode *u));
//中序遍历
void inorder(void(*visit)(btnode*u));
//层次遍历
void levelorder(void (*visit)(btnode*u));
//树的高度
int height()const;
//树的节点数
int size();
//删除运算
private:
int count;
btnode *root;//root
void _insert(btnode *anew,btnode* &node);
void _preorder(void(*visit)(btnode*u),btnode *root);
void _postorder(void(*visit)(btnode*u),btnode *root);
void _inorder(void(*visit)(btnode*u),btnode *root);
void _levelorder(void (*visit)(btnode*u),btnode *node,queue&);
int _height(btnode*root);
btnode* _deepsearch(const T&data,btnode*& node);
btnode* _breadsearch(const T&data,btnode*& node);
};