题目:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
这道问题其实很简单,原以为可以打出来一次运行成功。实际发现脱离编译器手写没有一点bug真的是有点难度,稍不注意代码就错了。这里我们先对子树镜像,然后上溯到根结点调换左右子树就可以了。这里犯了两个错误(1)没有先保存好根结点的左右子树,递归调用右子树时再取右子树已经不是原来的右子树了。(2)返回类型不是void类型的函数一定要检查是不是每种情况下都有返回值。不要一开始写了几个if语句返回值程序最后就不写返回值了。
BinaryTreeNode* MirrorTree(BinaryTreeNode* pRoot)
{
if(!pRoot)
return NULL;
if(!pRoot->m_pLeft && !pRoot->m_pRight)
return pRoot;
BinaryTreeNode* left = pRoot->m_pLeft;
BinaryTreeNode* right = pRoot->m_pRight;
pRoot->m_pLeft = MirrorTree(right);
pRoot->m_pRight = MirrorTree(left);
return pRoot;
}