二叉树的镜像

来源:互联网 发布:域名过期多少钱续费 编辑:程序博客网 时间:2024/05/19 20:39

二叉树的镜像是指将二叉树的每个节点的左右子树交换位置,就像从镜子里看到的一样。
定义二叉树:

using namespace std;template <class T>struct BinaryTreeNode//定义二叉树的节点{    BinaryTreeNode(const T& value)        :_value(value)        ,_pLeft(NULL)        ,_pRight(NULL)    {}    T _value;    BinaryTreeNode<T>* _pLeft;    BinaryTreeNode<T>* _pRight;};template<class T>class BinaryTree//定义二叉树{    typedef BinaryTreeNode<T> Node;public:    BinaryTree()        :_pRoot(NULL)    {}private:    Node* _pRoot;//根节点};

方法一:递归

    void BinaryMirror()    {        return _BinaryMirror(_pRoot);    }    void _BinaryMirror(Node* pRoot)    {        if(pRoor == NULL)            return ;        std::swap(pRoot->_pLeft, pRoot->_pRight);        _BinaryMirror(pRoot->_pLeft);        _BinaryMirror(pRoot->_pRight);    }

根据先序遍历的顺序,递归的调用该程序。
方法二:用队列保存

void BinaryMirror_Nor()    {        if(_pRoot == NULL)            return ;        queue<Node*> q;        q.push(_pRoot);        while(!q.empty())        {            Node* pCur = q.front();            if(pCur->_pLeft)                q.push(pCur->_pLeft);            if(pCur->_pRight)                q.push(pCur->_pRight);            std::swap(pCur->_pLeft, pCur->_pRight);            q.pop();        }    }
0 0