您的位置:首页 > 其它

二叉树的镜像

2017-05-07 18:34 183 查看
二叉树的镜像是指将二叉树的每个节点的左右子树交换位置,就像从镜子里看到的一样。

定义二叉树:

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: