优化这段代码int search(struct tnode * root, char str[]) { if (root == NULL) return 0; struct tnode * tmp = root; int i = 0, k; while (str[i]) { k = str[i] - 'a'; if (tmp->ptr[k]) { tmp = tmp->ptr[k]; } else return 0; i++; } tmp->num++; return tmp->num; }
时间: 2023-12-14 07:39:27 浏览: 94
这段代码实现的是在一个Trie树中查找字符串,如果字符串存在,则返回该字符串在Trie树中的出现次数,否则返回0。
这里有几个可以优化的地方:
1. 在while循环中,可以使用更加简洁的for循环来遍历字符串,如下所示:
```c
for (int i = 0; str[i]; i++) {
int k = str[i] - 'a';
if (tmp->ptr[k]) {
tmp = tmp->ptr[k];
} else {
return 0;
}
}
```
2. 在判断tmp->ptr[k]是否为NULL时,可以直接使用if (tmp->ptr[k])来替代if (tmp->ptr[k] != NULL),这样代码更加简洁。
3. 可以将tmp->num++放到while循环中,这样可以减少一次判断,如下所示:
```c
for (int i = 0; str[i]; i++) {
int k = str[i] - 'a';
if (tmp->ptr[k]) {
tmp = tmp->ptr[k];
tmp->num++;
} else {
return 0;
}
}
return tmp->num;
```
这样修改后的代码如下:
```c
int search(struct tnode * root, char str[]) {
if (root == NULL)
return 0;
struct tnode * tmp = root;
for (int i = 0; str[i]; i++) {
int k = str[i] - 'a';
if (tmp->ptr[k]) {
tmp = tmp->ptr[k];
tmp->num++;
} else {
return 0;
}
}
return tmp->num;
}
```
阅读全文