您的位置:首页 > 职场人生

程序员面试100题之十三:求二叉查找树的镜像

2011-08-27 16:02 295 查看
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:

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