二叉树
二叉树是重要的数据结构,在学习中以及考试、面试中不可避免的考点,现在我就把有关二叉树的操作用C++总结 一下,可能有些同学使用的是C语言,但是无论C语言还是c++,对于二叉树的操作方法都是一样的,之后,我也会抽空给出C语言的实现。
本次实现是在vs2008的一个集成开发环境,为了增强代码的复用性,此次编写使用了模版,关于模版可以参考的我的另外一篇博客:http://blog.csdn.net/dy_1024/article/details/78643644,如果大家在使用的时候,不实用模版,只需把代码中的模版类型T,换成你需要的类型即可。
首先我们用结构体给出二叉树结点的结构:
template<class T>//如果大家不使用模版的话,把这行代码去掉,将结构体中的T该成你需要的类型即可
struct BinTreeNode{
BinTreeNode(const T& data):_left(NULL),_right(NULL),_data(data){}//二叉树结点的构造函数,方便之后给出新结点
BinTreeNode* _right;//右子树
BinTreeNode* _left;//左子树
T _data;//数据域
};
因为使用c++,所以我们将二叉树封装成一个二叉树类,进行管理,同样使用模版:
template<class T>
class BinTree
{
typedef BinTreeNode<T> Node;//将之前的类此重定义,方便以后的使用
typedef Node* PNode;
public:
BinTree():_pRoot(NULL){}
//构造函数里面使用的创建二叉树的函数,
void _CreatBinTree(PNode& pRoot,const T* array,size_t size,size_t& index,const T& invalid)
{
if(index<size && array[index] != invalid)
{
pRoot = new Node(array[index]);
_CreatBinTree(pRoot->_left,array,size,++index,invalid);
_CreatBinTree(pRoot->_right,array,size,++index,invalid);
}
}
//构造函数,在给构造函数传参的时候,我们定义:char *array ="ABD###CE##F",这是二叉树前序遍历的结果,&