二叉树数据结构 BinTree.h

///////////////////////////
//    //
//   二叉树数据结构  BinTree.h       //
//    //
//////////////////////////

#include<iostream.h>

template<class Type>class BinTree;

template<class Type>
class TreeNode
{
protected:
friend class BinTree<Type>;
TreeNode():lchild(NULL),rchild(NULL){}
Type data;
TreeNode *lchild;  //左，右子树
TreeNode *rchild;
};

template<class Type>
class BinTree
{
friend void BinTree_PRE(BinTree<Type>& BinTreeOPP);  //友元函数
friend void BinTree_INO(BinTree<Type>& BinTreeOPP);
friend void BinTree_POS(BinTree<Type>& BinTreeOPP);
friend void BinTree_Destroy(BinTree<Type>& BinTreeOPP);
public:
BinTree():root(NULL){}
void CreatTree();               //创建二叉树,主过程
void CreatTree(TreeNode<Type>* child,int k); //子过程
void PreTree(TreeNode<Type> *point);     //先序遍历二叉树
void InoTree(TreeNode<Type> *point);  //中序遍历二叉树
void PosTree(TreeNode<Type> *point);  //后序遍历二叉树
void Destroy(TreeNode<Type> *point);     //销毁二叉树
bool ISEmpty();
protected:
TreeNode<Type>* root;
};

template<class Type>
void BinTree<Type>::CreatTree()
{
CreatTree(root,1);
}

template<class Type>
void BinTree<Type>::CreatTree(TreeNode<Type>* child,int k)
{
TreeNode<Type>* point;
point=new TreeNode<Type>;
cout<<"输入节点数据项 :";
cin>>point->data;
switch(k)
{
case 1: root=point; break;
case 2: child->lchild=point;break;
case 3: child->rchild=point;break;
}

char temp;
cout<<"该"<<point->data<<"节点是否有左子树 Y / 任意键 :";
cin>>temp;
if(temp=='y'||temp=='Y')
{
CreatTree(point,2);
}

cout<<"该"<<point->data<<"节点是否有右子树 Y / 任意键 :";
cin>>temp;
if(temp=='y'||temp=='Y')
{
CreatTree(point,3);
}
}

template<class Type>
void BinTree<Type>::PreTree(TreeNode<Type> *point)
{
if(point!=NULL)
{
cout<<" "<<point->data;
PreTree(point->lchild);
PreTree(point->rchild);
}
}

template<class Type>
void BinTree<Type>::InoTree(TreeNode<Type> *point)
{
if(point!=NULL)
{

InoTree(point->lchild);
cout<<" "<<point->data;
InoTree(point->rchild);
}
}

template<class Type>
void BinTree<Type>::PosTree(TreeNode<Type> *point)
{
if(point!=NULL)
{

PosTree(point->lchild);
PosTree(point->rchild);
cout<<" "<<point->data;
}
}

template<class Type>
bool BinTree<Type>::ISEmpty()
{
return root==NULL;
}

template<class Type>
void BinTree<Type>::Destroy(TreeNode<Type> *point)
{
if(point!=NULL)
{
Destroy(point->lchild);
Destroy(point->rchild);
delete point;
}
}
• 本文已收录于以下专栏：

浅谈数据结构和算法：二叉树

﻿﻿ 歇了几天了，没有写博客。从今天开始要总结树和二叉树了。那么什么是树呢？ 1，树的定义： 1）有且仅有一个特定的称为根Root的结点。 2）当n>1时，其余结点可分为m(m>0)个互不相交...
• zxh2075
• 2016年10月12日 15:25
• 1190

C++ 数据结构-------二叉树实现

• u011641755
• 2016年10月01日 22:07
• 600

数据结构之二叉树建立

• pashanhuxp
• 2014年09月23日 13:54
• 2956

【数据结构】二叉树的原理及实现学习总结

• jianyuerensheng
• 2016年04月25日 09:46
• 5284

我的软考之路（四）——数据结构与算法（2）之树与二叉树

• jiuqiyuliang
• 2014年04月25日 08:16
• 9670

《数据结构》创建二叉树

• sungaochao
• 2016年06月21日 23:17
• 749

[数据结构] 二叉树的建立及其基本操作

• sr19930829
• 2014年05月28日 19:16
• 2731

数据结构之二叉树(概念)

• li_101357
• 2015年07月19日 17:10
• 1221

数据结构学习之二叉树（性质总结）

1、二叉树结点编号在一棵n个结点的完全二叉树中，从树根起，自上层到下层，每层从左至右，给所有结点编号，能得到一个反映整个二叉树结构的线性序列。 编号特点 2、二叉树性质...
• xy010902100449
• 2015年06月22日 10:13
• 2535

数据结构—二叉树（C语言实现）

• Emiedon
• 2016年07月20日 09:22
• 995

举报原因： 您举报文章：二叉树数据结构 BinTree.h 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)