下面我给出一棵二叉树和他的镜像,所谓镜像就是一棵树就跟在镜子中显示一样,左右反转,示意图如下:
根节点的左右孩子互换,我们可递归实现:
void _MirrorTree(Node* root)
{
if (root == NULL)//树为空
return;
if (root->_left == NULL&&root->_right == NULL)//只有一个根节点
return;
Node* cur = root->_left;
root->_left = root->_right;
root->_right = cur;
if (root->_left)
_MirrorTree(root->_left);
if (root->_right)
_MirrorTree(root->_right);
}
同样根据层序遍历的方法来完成,将根节点送入队列,交换队头元素左右孩子,队头元素出队列,若其左后孩子不为空,分别将左右孩子压入队列,依次,直到队列没有元素为止。用非递归实现:
void _MirrorTreeR(Node* root)
{
queue<Node*> q;
q.push(root);
while (q.size())
{
Node* cur = q.front();
q.pop();
//交换左右孩子
Node* node = cur->_left;
cur->_left = cur->_right;
cur->_right = node;
if (cur->_left)
q.push(cur->_left);
if (cur->_right)
q.push(cur->_right);
}
}