一、树的递归
简单,这个地方我给整合一下模板。
void dfs(TreeNode *root){
if(root == nullptr> return;
// visit(root); 前序遍历
dfs(root->left);
// visit(root); 中序遍历
dfs(root->right);
// visit(root); 后续遍历
}
二、字典树模板
class TrieNode{
public:
TrieNode* childNode[26];
bool isVal;
TrieNode(void):isVal(false){
for(auto& node:childNode) node = nullptr;
}
};
class Trie{
TrieNode* root;
public:
Trie():root(new TrieNode()){}
// 向字典树插入一个词
void insert(string word){
TrieNode* temp = root;
for(int i = 0;i < word.size();++i){
if(!temp->childNode[word[i] - 'a']) temp->childNode[word[i] - 'a'] = new TrieNode();
temp = temp->childNode[word[i] - 'a'];
}
temp->isVal = true;
}
// 判断字典树是否有一个词
bool search(string word){
TrieNode* temp = root;
for(int i = 0;i < word.length();++i){
if(!temp) break;
temp = temp->childNode[word[i] - 'a'];
}
return temp ? temp->isVal : false;
}
// 判断字典树是否有一个以词开始的前缀
bool stratWith(string prefix){
TrieNode* temp = root;
for(int i = 0;i < prefix.size();++i){
if(!temp) break;
temp = temp->childNode[prefix[i] - 'a'];
}
return temp != nullptr;
}
};