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

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

2011-11-09 09:35 218 查看
转自:http://blog.csdn.net/hackbuteer1/article/details/6724812

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

例如输入:

     8

    / \

  6   10

  /\    /\

 5 7  9 11

输出:

     8

    / \

  10  6

  /\    /\

11 9 7  5

这题相对很简单,没什么说的,直接代码了。。。

view
plain

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);  

    }  

}
 

评:此题关键是交换指针,而不是交换数。若交换的是数则不好实现。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试