hdu 1004

来源:互联网 发布:林珊珊淘宝店铺首页 编辑:程序博客网 时间:2024/06/06 17:16

一开始看到这题觉得没思路,因为并没有给出颜色的范围,那么就需要用到链表这样的特殊结构。然而,并不会使用指针的我,设计的链表根本不能运行。

然而,幸运的是,周一那天,让大神帮我查看了自己编写的二叉搜索树的代码,大神也是用gdb文件 调试之后才找出错因。

然而,我又改了好久,才想出用指针的引用来处理二叉树的插入。然而直接也没有想出来怎样解决二叉树的删除结点操作。虽然逻辑上很容易想明白,

但是由于对指针的使用还是太嫩,总是不能按我的心意来进行。


话不多说,这里是二叉搜索树方法,运行只花了0MS。测试数据太。。。狗血了。

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;


int cnt;


struct Node
{
     int time;
     char col[100];
     Node *le,*ri;
     bool operator <(Node node){
          if(strcmp(col,node.col)<0)
               return true;
          else
               return false;
     }
     bool operator ==(Node node)
     {
          if(strcmp(col,node.col)==0)
               return true;
          else
               return false;
     }
};


Node temp,*root,node;


void make(Node *&r,Node node)//这里并没有用上,因为插入时就考虑了类似的情况,比如叶子节点。
{
     r=new Node;
     strcpy(r->col,node.col);
     r->time=1;
     r->le=NULL;
     r->ri=NULL;
     return ;
}


void clearbst(Node *&r)
{
     r=NULL;
     return ;
}


void insertbst(Node *&r,Node node)
{
     if(r==NULL)
     {
          r=new Node;
          strcpy(r->col,node.col);
          r->time=1;
          r->le=NULL;
          r->ri=NULL;
          return ;
     }
     strcpy(temp.col,r->col);
     if(node==temp){
          r->time++;
          if(r->time>cnt)
               cnt=r->time;
          return ;
     }
     else if(node<temp)
          insertbst(r->le,node);
     else
          insertbst(r->ri,node);
}


void maxtime(Node *r)
{
     if(r!=NULL)
     {
          maxtime(r->le);
          if(r->time==cnt)
               cout<<r->col<<endl;
          maxtime(r->ri);
     }
}


int main()
{
     int n;
     while(cin>>n,n!=0)
     {
          cnt=1;//回归,次数至少是1,但上一次也许会影响下一次的输出,范例很好.
          getchar();
          for(int i=1;i<=n;i++)
          {
               cin>>node.col;
               insertbst(root,node);
          }
          maxtime(root);
          clearbst(root);
     }
}

0 0
原创粉丝点击