文章
17
粉丝
177
获赞
28
访问
122.8k
#include<iostream>
using namespace std;
string larger_than_root(string s){ //计算比根大的子串
int start_pos = 0;
while(start_pos < s.length()){
if(s[start_pos] > s[0]) break;
else start_pos++;
}
int end_pos = start_pos + 1;
while(end_pos < s.length()){
if(s[end_pos] < s[0]) break;
else end_pos++;
}
return s.substr(start_pos, end_pos - start_pos);
}
string lower_than_root(string s){ //计算比根小的字串
int start_pos = 0;
while(start_pos < s.length()){
if(s[start_pos] < s[0]) break;
else start_pos++;
}
int end_pos = start_pos + 1;
while(end_pos < s.length()){
if(s[end_pos] > s[0]) break;
else end_pos++;
}
return s.substr(start_pos, end_pos - start_pos);
}
bool is_same_search_tree(string s1,string s2){
if(s1.length() != s2.length()) return false; //如果长度都不相等肯定不是
else if(s1.length() == 0){ //都是长度为零,肯定是
...
登录后发布评论
思路很好,就是那个提取左右子树的函数写的有点小问题,作者那么写只能提取出后面连续一段的,如果断开的,就会没处理到,比如3452168
第一次提取3的右子树只能提取到45而68没提取到
若要正确处理所有比根大的字符,应修改
larger_than_root
和lower_than_root
函数,直接遍历所有字符,而非仅提取连续的一段。string larger_than_root(string s) {
string res;
for (int i = 1; i < s.length(); ++i) {
if (s[i] > s[0])
{ res += s[i]; }
} return res;
}
string lower_than_root(string s) {
string res;
for (int i = 1; i < s.length(); ++i) {
if (s[i] < s[0]) {
res += s[i]; }
}
return res;
}