关闭

利用二叉搜索树来实现排序 BSTree(pku 1002)

标签: nulliostreaminsertclassdeletec
465人阅读 评论(0) 收藏 举报
分类:

来自:http://blog.csdn.net/benny5609/category/334908.aspx 

#include <iostream>

using namespace std;

int flag;

class tNode{
    public:
        tNode();
        tNode(int value);
        int val;
        int counts;
        tNode * lch, * rch;
};
tNode::tNode(){
    val = 0;
    counts = 0;
    lch = rch = NULL;
}
tNode::tNode(int value) {
    val = value;
    counts = 1;
    lch = rch = NULL;
}

class BSTree{
    public:
        BSTree();
        tNode * insert(tNode *);
        void mfs(tNode *);
        tNode * root;
};
BSTree::BSTree(){
    root = NULL;
}
tNode * BSTree::insert(tNode * z) {  //寻找合适的位置来插入
    tNode * y = NULL;
    tNode * x = root;
    while (x!=NULL) {   //寻找合适的插入位置
        y = x;
        if (z->val == x->val) {  //与要插入的元素值相同的元素已经存在
            ++x->counts;
            break;
        } else if (z->val < x->val) {
            x = x->lch;
        } else {
            x = x->rch;
        }
    }
    if (NULL==x) {
        if (NULL==y) root = z;  //之前是一棵空的树
        else {    //插在已经找到的合适的位置
            if (z->val < y->val)
                y->lch = z;
            else
                y->rch = z;
        }
    }
    return z;
}

void BSTree::mfs(tNode * tn) { //具有排序的功能。从二叉树的最左边开始递归遍历整棵树
    if (NULL==tn) return;
    mfs(tn->lch);
    if (tn->counts>1)
 {
        if (!flag)
   flag = 1;
        cout.width(3);
        cout<<tn->val/10000;
        cout<<"-";
        cout.width(4);
        cout<<tn->val%10000;
        cout<<" "<<tn->counts<<endl;
    }
    mfs(tn->rch);
}


int main(){
    int i,N,val;
    char c;
    BSTree * bst = new BSTree();
    flag = 0;
    cin>>N;
    c = cin.get(); // remove '/n'
    for (i=0;i<N;++i) {
        // input
        val = 0;
        while ((c=cin.get())!='/n'){
            if (c>='0' && c<='9')
                val=val*10+c-'0';
            else if (c>='A' && c<'Q')
                val=val*10+(c-'A')/3+2;
            else if (c>'Q' && c<'Z')
                val=val*10+(c-'Q')/3+7;
        }
        bst->insert(new tNode(val));
        // solve
    }
    cout.fill('0');
    bst->mfs(bst->root);
    if (!flag) cout<<"No duplicates. ";
    delete bst;
    return 0;
}

 


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27405次
    • 积分:423
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:11篇
    • 译文:0篇
    • 评论:1条