如下一棵二叉树:
它的镜像二叉树为:
我们应该怎么操作,可以根据一颗二叉树得到它的镜像二叉树呢?
其实不难,我们先序遍历二叉树的结点,如果该结点有左右孩子,我们就交换它的左右孩子,直到我们把所有的非叶子结点都交换过了,那我们就得了该二叉树的镜像二叉树
void Mirror(TreeNode *pRoot)
{
if(pRoot == NULL){ //如果根结点为空,就返回
return;
}
//下面这句可要可不要,加上对性能更好
if(pRoot->pLeft == NULL && pRoot->pRight == NULL){
return;
}
TreeNode *pLeft = pRoot->pLeft; //先通过一个变量pLeft将左孩子保存,然后进行交换
pRoot->pLeft = pRoot->pRight;
pRoot->pRight = pLeft;
Mirror(pRoot->pLeft); //递归调用
Mirrir(pRoot->pRight); //递归调用
}