题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
8
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
这题相对很简单,没什么说的,直接代码了。。。
void BSTree::mirrorRec(BSTreeNode* node)
{
if (!node)
return;
mirrorRec(node->lc);
mirrorRec(node->rc);
BSTreeNode* temp = node->lc; //交换左、右子树
node->lc = node->rc;
node->rc = temp;
}
void BSTree::mirrorRec() // 递归
{
mirrorRec(root);
}
void BSTree::mirror() // 非递归
{
stack<BSTreeNode*> st;
st.push(root); //将二叉树的根结点压栈
while (!st.empty())
{
BSTreeNode *t = st.top();
BSTreeNode *temp;
st.pop();
temp = t->lc; //交换左、右子树
t->lc = t->rc;
t->rc = temp;
if (t->lc)
st.push(t->lc);
if (t->rc)
st.push(t->rc);
}
}