二叉树数据结构 BinTree.h

原创 2004年10月23日 21:22:00
///////////////////////////
//    //
//   二叉树数据结构  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
  • zxh2075
  • 2016年10月12日 15:25
  • 1190

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

最近写了一个简单的二叉树,仅供查考,代码如下: #include using namespace std; typedef char T; class bst {     str...
  • u011641755
  • u011641755
  • 2016年10月01日 22:07
  • 600

数据结构之二叉树建立

树上的笔记记的快满了,随转到博客记录一下
  • pashanhuxp
  • pashanhuxp
  • 2014年09月23日 13:54
  • 2956

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

二叉树概述数组、向量、链表都是一种顺序容器,它们提供了按位置访问数据的手段。而很多情况下,我们需要按数据的值来访问元素,而不是它们的位置来访问元素,二叉树在很大程度上解决了这个问题,二叉树是按值来保存...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月25日 09:46
  • 5284

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

上篇博文主要介绍的是数据结构的线性结构,我们这篇博文介绍非线性结构—树与二叉树,我先介绍树的一些基本概念,树的遍历,再介绍二叉树相关概念和特性,以及二叉树的遍历,最后再树与二叉树的对比,总结。    ...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年04月25日 08:16
  • 9670

《数据结构》创建二叉树

输入节点值得时候要注意!!! 要按照abc##de#g##f###的格式输入。 /* 二叉树 */ #include //使用二叉链表存储二叉树 typedef struct BiTNode...
  • sungaochao
  • sungaochao
  • 2016年06月21日 23:17
  • 749

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

如图: 代码:   #include #include #include #include using namespace std; char ch; typedef struct Bi...
  • sr19930829
  • sr19930829
  • 2014年05月28日 19:16
  • 2731

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

树的定义: 树是n个结点的有限集。 n = 0 称为空树。如果n>0,则: (1)有一个特定的称之为根的结点,它只有直接后继,但没有直接前驱。 (2)除根以外的其他结点划分为m个互不相交的有限集...
  • li_101357
  • li_101357
  • 2015年07月19日 17:10
  • 1221

数据结构学习之二叉树(性质总结)

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

数据结构—二叉树(C语言实现)

以下所有内容来自网易云课堂——数据结构(小甲鱼版) 对于树来说,一旦可以指明他的分支数,那么就可以用链表来实现了 二叉树是应用广泛的树,因为现实世界大部分模型都只包含0,1这两种情况,非常...
  • Emiedon
  • Emiedon
  • 2016年07月20日 09:22
  • 995
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树数据结构 BinTree.h
举报原因:
原因补充:

(最多只允许输入30个字)