您的位置:首页 > 职场人生

剑指offer-面试题.二叉树的镜像

2015-07-24 16:33 579 查看
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

二叉树节点定义如下:

strcut BinaryTreeNode
{
int val;
strcut BinaryTreeNode* m_pleft;
strcut BinaryTreeNode* m_pright;
}


本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-Invert Binary Tree)[b]一文[/b]

实质是递归交换二叉树的左右节点。

比如

8
/  \
6    10
/ \   / \
5  7  9  11


1.首先查看根节点与左右子节点是否为空,若为空则无需交换

2.先交换根节点的左右子节点。

3.再交换交换后的左子树的左右节点和右子树的左右节点

4.知道到达叶子节点,交换结束。

递归函数如下:

void MirrorRecursively(BinaryTreeNode *pNode)
{
if(pNode==NULL)
return NULL;

if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
return NULL;

struct BinaryTreeNode *TempNode;
TempNode=pNode->m_pleft;
pNode->m_pleft=pNode->m_pright;
pNode->m_pright=TempNode;

if(pNode->m_pleft)
{
MirrorRecursively(pNode->m_pleft);
}

if(pNode->m_pright)
{
MirrorRecursively(pNode->m_pright);
}
}


说明:注意结束条件,到达叶子结点结束

if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
7         return NULL;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: