二叉树(六)----遍历算法的应用

一、先序遍历统计二叉树中的结点数:

void PreOrder(BiTree root)//先序遍历统计结点个数 
{
	if(root)
	{
		count++;//count是全局变量,初始值为0 
		PreOrder(root->Lchild);
		PreOrder(root->Rchild);
	}
}

二、输出二叉树中的叶子结点:

因为三种遍历算法输出的是一样的,下面采用中序遍历:

void InOrder(BiTree root)//中序遍历输出叶子结点
{
	if(root)
	{
		InOrder(root->Lchild);
		if(root->Lchild==NULL&&root->Rchild==NULL)
			printf("%c",root->data);//输出的叶子结点 
		InOrder(root->Rchild);
	}
} 

三、统计叶子结点的数目(采用后序遍历):

方法一:使用全局变量:

void PostOrder(BiTree root)//后序遍历统计叶子结点的数目1
{
	if(root)
	{
		PostOrder(root->Lchild);
		PostOrder(root->Rchild);
		if(root->Lchild==NULL&&root->Rchild==NULL)
			count++;//全局变量统计叶子结点的数目,初始值为0 
	}	
} 

方法二:通过函数返回值方法:

int leaf(BiTree root)//后序遍历统计叶子结点的数目2
{
	int n=0,nl,nr;
	if(root==NULL)
		return 0;
	if(root->Lchild==NULL&&root->Rchild==NULL)
		return 1;
	nl=leaf(root->Lchild);
	nr=leaf(root->Rchild);
	n=nl+nr;
	return n;
} 

四、求二叉树的高度

方法一:使用全局变量求二叉树的高度:

void Hight(BiTree root,int h)//全局变量求二叉树的高度
{
	if(root)
	{
		//h是root结点所在的层次,初始值为1
		if(h>depth)
			depth=h;//depth是全局变量,记录求得最大的层数,初始值为0
		Hight(root->Lchild,h+1);
		Hight(root->Rchild,h+1); 
	}
} 

方法二:通过函数返回值的方法:

int High(BiTree root)//利用,函数返回值求二叉树的高度 
{
	int hl,hr,h=0;
	if(root==NULL)
		return 0;
	else
	{
		hl=High(root->Lchild);
		hr=High(root->Rchild);
		h=(hl>hr?hl:hr)+1;
		return h;
	}
}

五、求二叉树中结点的双亲:

算法思想:遍历这棵二叉树,若当前结点为空,则没有双亲结点;若当前结点非空或者当前结点的左孩子或者右孩子等于所求结点,则当前结点就是所求结点的双亲结点;若不是,可在左子树中先找,找到当前结点的左孩子等于所求结点,则找到,否则,可在当前结点的右子树中找,找到当前结点的右孩子等于所求结点,则已找到。

BiTree Parent(BiTree root ,BiTree q)//求结点q的双亲
{
	BiTree p;
	if(root==NULL)
		return NULL;
	if(root->Lchild==q||root->Rchild==q)
		return root;
	else
	{
		p=Parent(root->Lchild,q);
		if(p!=NULL)
			return p;
		else
			return (Parent(root->Rchild,q));
	}
} 

六、二叉树的相似性判定:

int like(BiTree t1,BiTree t2)//二叉树的相似性判定
{
	int likel,liker;
	if(t1==NULL&&t2==NULL)
		return 1;
	else if(t1==NULL||t2==NULL)
		return 0;
	else
	{
		likel=like(t1->Lchild,t2->Lchild);
		liker=like(t1->Rchild,t2->Rchild);
		return (likel&&liker);
	}
} 


 



 

猜你喜欢

转载自blog.csdn.net/wangkeke1996/article/details/79181477