题解 | #二叉搜索树#

二叉搜索树

https://www.nowcoder.com/practice/3d6dd9a58d5246f29f71683346bb8f1b

#include <bits/stdc++.h>

using namespace std;

const int N = 30;

int w1[N], l1[N], r1[N], idx1=1, root1;
int w2[N], l2[N], r2[N], idx2=1, root2;
string pre1;
string pre2;
string in1;
string in2;

void insert1(int &u, int x){
	if (!u){
		u = idx1 ++;
		w1[u] = x;
	}
	else if (x < w1[u]){
		insert1(l1[u], x);
	}
	else if (x > w1[u]){
		insert1(r1[u], x);
	}
}

void insert2(int &u, int x){
	if (!u){
		u = idx2 ++;
		w2[u] = x;
	}
	else if (x < w2[u]){
		insert2(l2[u], x);
	}
	else if (x > w2[u]){
		insert2(r2[u], x);
	}
}

void pre_order1(int u){
	if (!u) return;
//	cout << w1[u];
	pre1.push_back(char(w1[u]));
	pre_order1(l1[u]);
	pre_order1(r1[u]);
}

void in_order1(int u){
	if (!u) return;
	
	in_order1(l1[u]);
//	cout << w1[u];
	in1.push_back(char(w1[u]));
	in_order1(r1[u]);
}

void pre_order2(int u){
	if (!u) return;
//	cout << w2[u];
	pre2.push_back(char(w2[u]));
	pre_order2(l2[u]);
	pre_order2(r2[u]);
}
void in_order2(int u){
	if (!u) return;
	
	in_order2(l2[u]);
//	cout << w2[u];
	in2.push_back(char(w2[u]));
	in_order2(r2[u]);
}


int main(){
	int n;
	while (cin >> n){
		if (n == 0) break;
		string a;
		cin >> a;
		idx1 = 1;
		root1 = 0;
		for (int i=0; i<N; i++){
			w1[i] = l1[i] = r1[i] = 0;
		}
		for (auto item:a){
			insert1(root1, item -'0');
		} 
		pre1.clear();
		in1.clear();
		pre_order1(root1);
//		puts("");
		in_order1(root1);
//		puts("");
		while (n --){
			idx2 = 1;
			root2 = 0;
			for (int i=0; i<N; i++){
				w2[i] = l2[i] = r2[i] = 0;
			}
			string b;
			cin >> b;
			
			for (auto item:b){
				insert2(root2, item-'0');
			}
			pre2.clear();
			in2.clear();
			pre_order2(root2);
//			puts("");
			in_order2(root2);
//			puts("");
			
			if (pre1 == pre2){
				puts("YES");
			}
			else{
				puts("NO");
			}
			
		}
	} 
}

全部评论

相关推荐

真心劝退测开,这个方向真的不适合普通人,尤其是应届生。我身边这一届同学的情况,说实话已经很说明问题了。后端秋招一开始确实难,但只要技术不是太拉,后面补录、加面、捞人的机会一波接一波,最后基本都能上岸中小厂。而那些一开始就冲测开的,很多到现在还在等消息,甚至直接凉了。最直观的感受就是:测开的坑真的少得可怜。同一批同学里,后端、前端、客户端基本都有大厂&nbsp;offer&nbsp;扎堆的情况,哪怕不是顶级大厂,也能拿到几个中厂保底。但测开呢?泡出来的又有多少呢。不是不努力,是岗位就那么点,连给你复活赛的机会都没有。后端还能互相捞。秋招挂了,春招、补录、内推、转组,总能找到出口。测开一旦挂了,基本就是真的挂了,后面连投的岗位都没几个。目前有些转的人可能拿了几个不错的实习offer,那到秋招呢?hc少就笑不出来了。现在测开也就只有大厂和顶中厂有,小厂就是测试点点点,大厂也很多是点点点,后端起码还有小厂保个底还有人幻想什么先测开再转开发,我只能说太天真了。测开的经历,想转后端或者客户端根本不可能。核心开发经验没有,项目深度不够,面试官一句那你为什么不一开始就做开发基本宣判死刑。反过来,后端、前端干不下去了,转测开却很容易,这已经说明问题了。如果你是普通双非,那更要慎重。测开&nbsp;HC&nbsp;本来就少,筛人还看背景,普通学校在这种极小池子里基本就是陪跑。你用一个最普通的简历,去抢最少的岗位,结果可想而知。再说客户端和前端。很多人看不起前端,觉得卷,觉得不高级,但现实是岗位多、需求稳定、HC&nbsp;实在。客户端更不用说,Android&nbsp;和&nbsp;iOS&nbsp;到现在依然是硬需求,技术路线清晰,工程经验越久越值钱。我身边拿到大厂最多的,反而是客户端和前端,而不是测开。说句难听的,测开不是不能干,但那是给已经没得选的人准备的退路,不是给应届生拿来当首选的。秋招无脑选测开,本质就是用短期好像更容易上岸,换长期被动甚至被锁死。我是真心建议,能选客户端和前端就选客户端前端,再不行就去后端,哪怕多投多卷一点,也比一头扎进测开强得多。等你真正经历一轮秋招、春招、补录之后,就会发现被反复捞的,从来不是测开劝退不是唱衰,是不想看更多人踩已经踩烂的坑。
Java抽象小篮子:这话术换成劝退后端开发一点问题也没有,总有小登冲出来说别人想焊死车门,我寻思车门要真这么容易焊丝还轮得到你们上车吗
计算机有哪些岗位值得去?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务