题目:请完成一个二叉树,输入一个二叉树,该函数输出它的镜像。二叉树的结点定义如下:
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); } }
树的镜像是一个抽象的概念,我们需要在短时间内想清楚求镜像的步骤并转化为代码。我们可以通过画图的方法来使抽象问题形象化,这样有助于快速找到解决思路。最后,虽然代码很简单,可不要忘了测试呦。
二叉树镜像
最新推荐文章于 2022-04-06 16:20:27 发布