二叉树镜像

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

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

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

                                       

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

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

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);
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fireplusplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值