二叉树的操作(一)

二叉树的遍历

中序遍历

它是指对树中任一结点的访问实在遍历玩其左子树后进行的,访问此结点后,再对其右子数遍历。其遍历过程为:
1.中序遍历其左子树
2.访问根结点
3.中序遍历其右子树
代码:

void InorderTraversal(BinTree BT)
{
	if(BT)
	{
		InorderTraversal(BT->Left);
		//此处假设对BT结点的访问就是打印数据
		printf("%d",BT->Data);//鸡舍数据为整型
		InorderTraversal(BT->Right); 
	}
}

如图所示:
在这里插入图片描述

先序遍历

它是指对结点的访问是在其左、右子树遍历之前进行的,其遍历过程为:
1.访问根结点
2.先序遍历其左子树
2.先序遍历其右子数
代码:

void PreorderTraversal(BinTree BT)
{
	if(BT)
	{
		printf("%d",BT->Data);
		PreorderTraversal(BT->Left);
		PreorderTraversal(BT->Right);
	}
}

如图所示:
在这里插入图片描述

后序遍历

它是指结点左右子树的遍历先进行,然后才是对此结点的访问,其遍历过程为:
1.后序遍历其左子树
2.后序遍历其右子树
3.访问根结点
代码

void PostorderTraversal(BinTree BT)
{
	if(BT)
	{
		PostorderTraversal(BT->Left);
		PostorderTraversal(BT->Right);
		printf("%d",BT->Data);
	}
}

如图所示:
在这里插入图片描述

层序遍历

层序遍历的特点是从上到下,从左到右,其遍历过程为:(详见“二叉树的遍历–PTA”)

二叉树叶结点的输出算法

void PreorderPrintLeaves( BinTree BT )
{
    if(BT){
        if(!BT->Left&&!BT->Right)printf(" %c",BT->Data);
        if(BT->Left)PreorderPrintLeaves(BT->Left);
        if(BT->Right)PreorderPrintLeaves(BT->Right);
        
    }
}

二叉树的高度算法

在这里插入图片描述
代码

int GetHeight( BinTree BT )
{
	int HL,HR,MaxH;
	if(BT)
	{
		HL=GetHeight(BT->Left);
		HR=GetHeight(BT->Right);
		MaxH=HL>HR? HL:HR;
		return (MaxH+1);
	}
	else return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44256227/article/details/89851747