二叉树的镜像是指将二叉树的每个节点的左右子树交换位置,就像从镜子里看到的一样。 定义二叉树:
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(); } }