c++友元种,友元函数
c++友元类,友元函数
#ifndef _BST_H_HITHUMING_INCLUDE_
#define _BST_H_HITHUMING_INCLUDE_
#include<iostream>
using namespace std;
template<class T>
class node
{
public:
node():lchild(NULL),rchild(NULL) {};
node(T p)
{
this->data=p;
lchild=NULL;
rchild=NULL;
};
~node()
{
delete this;
};
void setup(T d,node<T>* l,node<T> r)
{
data=d;
lchild=l;
rchild=r;
};
T return_data()
{
return data;
};
node<T>* return_lc()
{
return lchild?lchild:NULL;
};
node<T>* return_rc()
{
return rchild?rchild:NULL;
};
friend class BST;//声明啦友元类,为什么下面还不能访问?
private:
T data;
node<T>* lchild,rchild;
};
template <class T>
class BST
{
public:
void CreateBST();//返回父节点的指针
void InsertBST(T key,node<T>* F);//插入的类型,还有插入的位置
node<T>* SearchBST(T key,node<T>* F);//查找
void in_order(node<T>* t);
node<T>* return_rt();
private:
node<T>* root;
};
template <class T>
void BST<T>::CreateBST()
{
root=NULL;
T m;
while(cin >> m&&m!='#')
InsertBST(m,root);
}
template <class T>
void BST<T>::InsertBST(T key,node<T>* F)
{
if(F==NULL)
{
// F=new node<T>;
F.setup(key,NULL,NULL);
}
else if (key<F.return_data())
InsertBST(key,F.return_lc());
else if (key > F.return_data())
InsertBST(key,F.return_rc());
else return;
}
template <class T>
node<T>* BST<T>::SearchBST(T k,node<T>* F)
{
node<T>* p =F;
if (p== NULL || k == p.return_data() ) /* 递归终止条件*/
return p;
if ( k < p.return_data())