目录
A:二叉排序树 - 文本输出
·上课写的
#include<bits/stdc++.h>
using namespace std;
struct BSTnode{
int data;
BSTnode*lc;
BSTnode*rc;
int level;
};
BSTnode* insert(BSTnode* &B,int x)
{
if(B==nullptr){
B=new BSTnode;
B->data=x;
B->lc=B->rc=nullptr;
// cout<<B->data<<endl;
}else if(B->data>x){
insert(B->lc,x);
}else if(B->data<x){
insert(B->rc,x);
}
return B;
}
void level(BSTnode* &B)
{
queue <BSTnode*>Q;
Q.push(B);
B->level=0;
while(!Q.empty())
{
BSTnode*node=Q.front();Q.pop();
if(node->lc!=nullptr)
{
node->lc->level=node->level+1;
Q.push(node->lc);
}
if(node->rc!=nullptr)
{
node->rc->level=node->level+1;
Q.push(node->rc);
}
}
}
int Pre(BSTnode* &B,int level)
{
if(B==nullptr){for(int i=0;i<level;i++)
cout<<" ";
cout<<"#\n";return 0;}
for(int i=0;i<B->level;i++)
cout<<" ";
cout<<B->data<<endl;
if(B->lc!=nullptr||B->rc!=nullptr)
{
Pre(B->lc,B->level+1);
Pre(B->rc,B->level+1);
}
return 0;
}
int main()
{
int n,x;cin>>n;
BSTnode*B=nullptr;
for(int i=0;i<n;i++)
{
cin>>x;
insert(B,x);
}
level(B);
Pre(B,0);
return 0;
}
B:销售排行榜
·蓝了aaaaa
#include<bits/stdc++.h>
using namespace std;
struct item{
string name;
int time;
int value;
};
item t[100000];
int cmp1(item a,item b)
{
return a.name<b.name;
}
int cmp2(item a,item b)
{
if(a.time!=b.time)return a.time>b.time;
else return a.name<b.name;
}
int main()
{
string date,name;
int i=0;
int time,price;
while(cin>>name>>time>>price>>date)
{
t[i].name=name;
t[i].time=time;
t[i].value=price*time;
i++;
}
sort(t,t+i,cmp1);
for(int j=0;j<i-1;j++)
{
if(t[j].name==t[j+1].name)
{
t[j].name="#";
t[j+1].time+=t[j].time;
t[j+1].value+=t[j].value;
}
}
sort(t,t+i,cmp2);
for(int j=0;j<i;j++)
{
if(t[j].name!="#")
cout<<t[j].name<<" "<<t[j].time<<" "<<t[j].value<<endl;
}
return 0;
}
C: 二叉排序树-平衡因子
·平衡因子=左子树深度-右子树深度
#include<bits/stdc++.h>
using namespace std;
struct BSTnode{
int data;
BSTnode*lc;
BSTnode*rc;
int level;
};
BSTnode* insert(BSTnode* &B,int x)
{
if(B==nullptr){
B=new BSTnode;
B->data=x;
B->lc=B->rc=nullptr;
// cout<<B->data<<endl;
}else if(B->data>x){
insert(B->lc,x);
}else if(B->data<x){
insert(B->rc,x);
}
return B;
}
void level(BSTnode* &B)
{
queue <BSTnode*>Q;
Q.push(B);
B->level=0;
while(!Q.empty())
{
BSTnode*node=Q.front();Q.pop();
if(node->lc!=nullptr)
{
node->lc->level=node->level+1;
Q.push(node->lc);
}
if(node->rc!=nullptr)
{
node->rc->level=node->level+1;
Q.push(node->rc);
}
}
}
int getdepth(BSTnode* &B)
{
if(B==nullptr)return 0;
return max(getdepth(B->lc),getdepth(B->rc))+1;
}
int Pre(BSTnode* &B,int level)
{
if(B==nullptr)
{for(int i=0;i<level;i++)
cout<<" ";
cout<<"#\n";return 0;}
for(int i=0;i<B->level;i++)
cout<<" ";
cout<<B->data<<"("<<getdepth(B->lc)-getdepth(B->rc)<<")"
<<endl;
if(B->lc!=nullptr||B->rc!=nullptr)
{
Pre(B->lc,B->level+1);
Pre(B->rc,B->level+1);
}
return 0;
}
int main()
{
int n,x;cin>>n;
BSTnode* B=nullptr;
for(int i=0;i<n;i++)
{
cin>>x;
insert(B,x);
}
level(B);
Pre(B,0);
return 0;
}
D: 案例 1-1.1 二分查找
·不注意细节就会浪费很多很多时间
#include<bits/stdc++.h>
using namespace std;
int binary(int n,int a[],int x)
{
int mid,l=0,r=n-1;
while(r>=l)
{
mid=l+(r-l)/2;
//cout<<l<<" "<<r<<" "<<mid<<endl;
if(a[mid]==x)
{
for(int i=mid;i>0;i--)
{
if(a[i]!=x)return i+2;
}
return 1;
}
else if(a[mid]>x)
{
r=mid-1;
}
else l=mid+1;
}
return -1;
}
int main()
{
int n;cin>>n;
int a[n];
for(int i=0;i<n;i++)cin>>a[i];
int x;cin>>x;
cout<<binary(n,a,x);
return 0;
}
E: 进阶实验 1-3.1:两个有序序列的中位数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;
int a[n],b[n];
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<n;i++)cin>>b[i];
if(n%2==0)
cout<<(a[n/2-1]+b[n/2-1])/2;
else
cout<<(a[n/2]+b[n/2])/2;
return 0;
}