[置顶] 二叉树镜像

题目请完成一个二叉树,输入一个二叉树,该函数输出它的镜像。二叉树的结点定义如下:

typedef struct BinaryTreeNode
{
	int	value;
	struct BinaryTreeNode	*pLeft;
	struct BinaryTreeNode	*pRight;
}BT, *PBT;

树的镜像对很多人来说是一个新的概念,我们可能很难一下子就想出来二叉树的镜像是什么样子,这个时候不妨画个图看看(根据镜子的经验画出来):

                                        [置顶] 二叉树镜像_第1张图片

如图所示,右面的二叉树即为左面二叉树的镜像。当然左面也同样是右面的镜像。

如此一来,这个题目貌似就不难了。我们可以很直观的从图中发现,只要遍历该二叉树的每一个结点,然后分别交换它们的左右孩子,这样就可以了。于是,便可以写出如下代码:

void BinaryTreeMirroring(PBT root)
{
	if (NULL == root)
		return;
	else
	{
		PBT tmp = root->pLeft;
		root->pLeft = root->pRight;
		root->pRight = tmp;
		BinaryTreeMirroring(root->pLeft);
		BinaryTreeMirroring(root->pRight);
	}
}

树的镜像是一个抽象的概念,我们需要在短时间内想清楚求镜像的步骤并转化为代码。我们可以通过画图的方法来使抽象问题形象化,这样有助于快速找到解决思路。最后,虽然代码很简单,可不要忘了测试呦。

你可能感兴趣的:(源代码,C语言,二叉树镜像)