求一颗二叉树的镜像

来源:互联网 发布:linux tail 显示行号 编辑:程序博客网 时间:2024/05/29 19:57

下面我给出一棵二叉树和他的镜像,所谓镜像就是一棵树就跟在镜子中显示一样,左右反转,示意图如下:
这里写图片描述
根节点的左右孩子互换,我们可递归实现:

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);        }    }