// 递归的代码:
void Swap(Bitree *lpNode)
{
// 将其左子树和右子树交换
Bitree *lpTemp = lpNode->left;
lpNode->left = lpNode->right;
lpNode->right = lpTemp;
// 如果左子树不为空,则递归左子树
if (lpNode->left)
{
Swap(lpNode->left);
}
// 如果右子树不为空,则递归右子树
if (lpNode->right)
{
Swap(lpNode->right);
}
}
// 非递归的算法如下:
list<Bitree *> lstNode;
if (lpRoot != NULL)
{
lstNode.push_back(lpRoot); // 首先将二叉树的根节点放到队列中
}
while (!lstNode.empty())
{
// 取出首元素
Bitree *lpNode = lstNode.front();
lstNode.pop_front();
// 交换其左右子树
Bitree *lpTemp = lpNode->left;
lpNode->left = lpNode->right;
lpNode->right = lpTemp;
// 如果左子树不为空,则放入队尾
if (lpNode->left)
{
lstNode.push_back(lpNode->left);
}
// 如果右子树不为空,则放入队尾
if (lpNode->right)
{
lstNode.push_back(lpNode->right);
}
}
温馨提示:答案为网友推荐,仅供参考