⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitreelib.h

📁 二叉树头文件 用以实现二叉树
💻 H
字号:
template <class  T>
BiTreeNode <T> *GetTreeNode (const T item, BiTreeNode <T> *left=NULL, 
BiTreeNode <T> *right=NULL)  
{
	BiTreeNode <T>  *p;
	p = new  BiTreeNode <T> ( item, left, right);
	return  p;
}

//template <class  T>
//void Visit( T  item)
//{
//	cout << item << "  ";
//}

//3. 前序遍历二叉树
template <class  T>
void  PreOrder ( BiTreeNode <T> *t,  void  Visit( T  item ))
{
	if (t != NULL)
	{
	Visit( t->data);
	PreOrder ( t->left( ), Visit );
	PreOrder ( t->right( ), Visit );
}
}

//4. 中序遍历二叉树
template <class  T>
void  InOrder ( BiTreeNode <T> *t,  void  Visit( T  item ))
{
	if (t != NULL)
	{	
	InOrder ( t->left( ), Visit );
    Visit( t->data);
	InOrder ( t->right( ), Visit );
}
}

//4. 后序遍历二叉树
template <class  T>
void  PostOrder ( BiTreeNode <T> *t,  void  Visit( T  item ))
{
	if (t != NULL)
	{	
	PostOrder ( t->left( ), Visit ); 
PostOrder ( t->right( ), Visit );
Visit( t->data);	
}
}

//5. 二叉树的撤销操作
template <class  T>
void  Destory( BiTreeNode <T> * &root )
{
	if ( (root) != NULL && (root)->left( ) != NULL)
		Destory (root->left( ));

	if ( (root) != NULL && (root)->right( ) != NULL)
		Destory (root->right( ));

	cout << root->data <<"  ";
	delete  root;
}

//6. 打印二叉树  //  
template <class  T>
void  PrintBiTree( BiTreeNode <T> * &root ,  int level)
{
	if ( (root) != NULL )
	{
		PrintBiTree(root->right( ) , level+1);

		if ( level !=0)
		{
		for ( int i=0;i<6*(level-1);i++)						
			cout << "  ";								
		cout <<"----"; 							
		}											
		cout << root->data <<endl;
		PrintBiTree(root->left( ) , level+1);
	}
}   													

//7. 查找数据元素
template <class  T>
BiTreeNode <T>  *Search ( BiTreeNode <T> * t ,  T  x)
{
	BiTreeNode <T>  *p;
if ( t==NULL )    return  NULL;
if ( t->data==x)   return  t;

	if ( t ->left( ) != NULL ) 
	{
	p = Search ( t-> left( ), x);	
	if ( p != NULL)   return  p;
}
	
	if ( t ->right()!= NULL ) 
	{
	p = Search ( t->right( ), x);	
	if ( p != NULL)   return  p;
}
	return   NULL;
}



//求二叉树的叶节点
int leave=0,mleave=1;
template <class  T>
void  TreeLeave(BiTreeNode<T> *&root)
{
	
	if(root!=NULL&&root->left()!=NULL)
		TreeLeave(root->left());
	if(root->right()!=NULL)
		TreeLeave(root->right());
	if(root->left()==NULL&&root->right()==NULL)
	{
		leave++;
		mleave=leave;
	    cout<<"该树有"<<leave<<"个叶节点"<<endl;
	}
}


//求二叉树高度
int j=0,jmax;
template <class T>
void TreeHigh(BiTreeNode<T> *&root)
{
	if(root!=NULL&&root->left()!=NULL)
	{
		j++;
		TreeHigh(root->left());
	}
	if(root!=NULL&&root->right()!=NULL)
	{
		j++;
		TreeHigh(root->right());
	}
	if(root->left()==NULL&&root->right()==NULL&&j>jmax)
	{
		jmax=j;
	    cout<<"该树有"<<jmax+1<<"层"<<endl;
	}
		j--;
}

//判断是否是完全二叉树
int i,jmin=100,k=0,l=0;
template <class T>
void FullBiTree(BiTreeNode<T> *&root)
{
	if(root!=NULL&&root->left!=NULL)
	{
		FullBiTree(root->left());
		l++;i++;
	}
	else
	if(root!=NULL&&root->right()!=NULL)
	{
		FullBiTree(root->right());
		l++;i++;
	}
	else
	if(root!=NULL&&root->left()==NULL&&root->right()!=NULL&&k<=1)
		k++;
	else
	if(root!=NULL&&root->left()==NULL&&root->right()==NULL&&l<jmin)
		jmin=l;
	l--;
	else
	if(i<pow(2,jmax)||i>=pow(2,jmax+1))
		cout<<"该树不是完全二叉树"<<endl;
	else if(k>=2)
		cout<<"该树不是完全二叉树"<<endl;
	else if(jmax-jmin>1)
		cout<<"该树不是完全二叉树"<<jmin<<endl;
	else
		cout<<"该树是完全二叉树"<<endl;
	
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -