c++搜索二叉树的基本操作

 
#include "iostream"
using namespace std;
struct Node
{
int Data;
Node *left;
Node  *right;
};
class Tree
{
private:
	Node *root;
public:
	Tree(){root=NULL;}
	void Insert(int item);
	void Insert(int item,Node *&p);//二查搜索树插入
	void Output();   //中序输出
	void Output(Node *p);
	int  Height();//判断高度
	int  Height(Node *p);
	int  Count();//判断节点数
	int  Count(Node *p);
	void Swap();    //交换左右节点
 	void Swap(Node *&p);
	bool Equal(Tree A);//判断两个树是否相同
	bool Equal(Node *p,Node *s);
    void Destroy();//破坏树 释放内存
	void Destroy(Node *p);
};
void Tree::Destroy();
void Tree::Destroy(Node *p);
bool Tree::Equal(Tree A);
bool Tree::Equal(Node *p,Node *s);
void Tree::Swap();
void Tree::Swap(Node *&p);
int Tree::Count();
int Tree::Count(Node *p); 
void Tree::Insert(int item);
void Tree::Insert(int item,Node *&p);
void Tree::Output();
void Tree::Output(Node *p);
int Tree::Height();
int Tree::Height(Node *p);
 
int main( )
{ 
 
	
	
	
	
	return 0;
}
bool Tree::Equal(Tree A)
{
	if(Equal(root,A.root)) return true;
	else return false;
}
bool Tree::Equal(Node *p,Node *s)
{
   if(p==NULL && s==NULL) return true;
   else if(p==NULL||s==NULL) return false;
   else if(p->Data!=s->Data) return false;
   else return Equal(p->left,s->left)&& Equal(p->right,s->right);
}
int Tree::Count()
{
	return Count(root);
}
int Tree::Count(Node *p)
{
	if(p==NULL) return 0;
	else
	{
		int R,L;
		R=Count(p->left);
		L=Count(p->right);
		return R+L+1;
	}
}
int Tree::Height()
{
	return Height(root);
}
int Tree::Height(Node *p)
{
	if(p==NULL) return 0;
	else
	{
		int R,L;
		L=Height(p->left);
		R=Height(p->right);
        if(L>R) return L+1;
		else  return R+1;
	}  
}
void Tree::Insert(int item)
{
	Insert(item,root);
}
void Tree::Insert(int item,Node *&p)
{
	if(p==NULL)
	{
	p=new Node;
	p->Data=item;
    p->left=NULL;
	p->right=NULL;
	}
   else	if(item>=p->Data)
	{
		Insert(item,p->right);
	}
	else
	{
		Insert(item,p->left);
	}
	
}
void Tree::Output()
{
	Output(root);
}
void Tree::Output(Node *p)
{
	if(p!=NULL)
	{
		Output(p->left);
		cout<<p->Data<<" ";
		Output(p->right);
	}
}
void Tree::Swap()
{
	Swap(root);
}
void Tree::Swap(Node *&p)
{
     	if(p==NULL) return;
 	    Swap(p->left);
		Swap(p->right);
		Node *ss;
		ss=NULL;
		ss=p->left;
		p->left=p->right;
		p->right=ss;
 
}
void Tree::Destroy()
{
	Destroy(root);
}
void Tree::Destroy(Node *p)
{
	if(p==NULL) return ;
	else
	{
		Destroy(p->left);
		Destroy(p->right);
		free(p);
	}
}

你可能感兴趣的:(c++搜索二叉树的基本操作)