二叉树系列——二叉树的镜像
2016-03-16 10:02
344 查看
来源:剑指offer 面试题19
思路:我们先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶子节点的左右子节点之后,就得到了树的镜像。
下面是代码:
//二叉树定义
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode*m_pRight;
};
/************************************************************************/
/* 二叉树的镜像 剑指offer,面试题19 */
/************************************************************************/
void BinaryTreeMirror(BinaryTreeNode* pNode){
if (pNode == NULL)//边界判断,输入为空
{
return;
}
if (pNode->m_pLeft == NULL&&pNode->m_pRight == NULL)//叶子节点
{
return;
}
BinaryTreeNode*pTemp = pNode->m_pLeft;//交换左右
pNode->m_pLeft = pNode->m_pRight;
pNode->m_pRight = pTemp;
if (pNode->m_pLeft)//左边不为空
{
BinaryTreeMirror(pNode->m_pLeft);
}
if (pNode->m_pRight)//右边不为空
{
BinaryTreeMirror(pNode->m_pRight);
}
}
思路:我们先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶子节点的左右子节点之后,就得到了树的镜像。
下面是代码:
//二叉树定义
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode*m_pRight;
};
/************************************************************************/
/* 二叉树的镜像 剑指offer,面试题19 */
/************************************************************************/
void BinaryTreeMirror(BinaryTreeNode* pNode){
if (pNode == NULL)//边界判断,输入为空
{
return;
}
if (pNode->m_pLeft == NULL&&pNode->m_pRight == NULL)//叶子节点
{
return;
}
BinaryTreeNode*pTemp = pNode->m_pLeft;//交换左右
pNode->m_pLeft = pNode->m_pRight;
pNode->m_pRight = pTemp;
if (pNode->m_pLeft)//左边不为空
{
BinaryTreeMirror(pNode->m_pLeft);
}
if (pNode->m_pRight)//右边不为空
{
BinaryTreeMirror(pNode->m_pRight);
}
}