首页 > 其他 > 详细

求二元查找树的镜像

时间:2014-02-26 15:46:39      阅读:213      评论:0      收藏:0      [点我收藏+]

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

例如输入:

     8
    /  \
  6      10
 /\       /\
5  7    9   11

输出:

      8
    /  \
  10    6
 /\      /\
11  9  7  5

定义二元查找树的结点为:

bubuko.com,布布扣
struct BSTreeNode // a node in the binary search tree (BST)
{
      int          m_nValue; // value of node
      BSTreeNode  *m_pLeft;  // left child of node
      BSTreeNode  *m_pRight; // right child of node
};
bubuko.com,布布扣

解题:

bubuko.com,布布扣
1.递归
void transform(BSTreeNode *tree)
{
    if(!tree)
        return ;

    BSTreeNode* temp;
    temp = tree->left;
    tree->left = tree->right;
    tree->right = temp;

    transform(tree->left);
    transform(tree->right);
}
bubuko.com,布布扣
bubuko.com,布布扣
2.循环
/****循环(前序)****/
void transform(BSTreeNode *tree)
{
    BSTreeNode* p = tree;
    Stack<BTNode*> S;
    while( p || !empty(S))
    {
        if(p)
        {            

            BSTreeNode* temp;
            temp = p->left;
            p->left = p->right;
            p->right = temp;
            
            push(p);

            p = p->left;
        }
        else
        {
            p = pop(S);

            p = p->right;
        }
    }
}
bubuko.com,布布扣

当然,也可以通过中序或者后序的方法来转换,也就是入栈和出栈的顺序改变一下。

求二元查找树的镜像

原文:http://www.cnblogs.com/idealing/p/3568061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!