99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Trie樹的實現(xiàn)

Trie樹的實現(xiàn) Trie樹是保存字符串公共前綴信息的數(shù)據(jù)結(jié)構(gòu),可用于字符串多模匹配普通的非壓縮Trie樹實現(xiàn)如下第一種實現(xiàn):每個分支節(jié)點使用map標準庫容器保存前綴索引#include map #include stack #include vector #include string #include iostream #include random using namespace std; enum Compare_Result {EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL}; struct TrieTreeNode //Trie樹節(jié)點類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點類型標志分支節(jié)點或存放關(guān)鍵字的葉節(jié)點 union { string key_in_trie; //葉節(jié)點關(guān)鍵字 mapchar, TrieTreeNode* sub_ptr; //分支節(jié)點的分支字符和對應(yīng)的指向分支字符對應(yīng)的子節(jié)點的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), sub_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE: new (key_in_trie) string(be_copied.key_in_trie); break; case NodeType::BRANCHNODE: { new (sub_ptr) mapchar, TrieTreeNode*(); for (mapchar, TrieTreeNode*::iterator p be_copied.sub_ptr.begin(); p ! be_copied.sub_ptr.end(); p) sub_ptr.insert(make_pair(p-first, nullptr)); } break; } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: sub_ptr.~mapchar, TrieTreeNode*(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-sub_ptr.empty(); } TrieTreeNode* getTrieTree() const { return root; } TrieTree(TrieTree be_copied) { root be_copied.copy(); } ~TrieTree(); private: Compare_Result static strCompare(const string left, const string right, string::size_type i); TrieTreeNode* root; //Trie樹根節(jié)點 }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } Compare_Result TrieTree::strCompare(const string left, const string right, string::size_type i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; vectorTrieTreeNode* stack; vectorTrieTreeNode*::size_type index; mapchar, TrieTreeNode*::iterator stop_branch_node; mapchar, TrieTreeNode*::iterator leaf_father_point_to_leaf; { string::size_type i 0; while (true) { if (i be_deleted.size()) { mapchar, TrieTreeNode*::iterator it; it run-sub_ptr.find(be_deleted[i]); if (it run-sub_ptr.end()) return false; i; if (run root || run-sub_ptr.size() 2) { if (it-second-type_flag TrieTreeNode::NodeType::BRANCHNODE) { index stack.size(); stop_branch_node it; } else { leaf_father_point_to_leaf it; break; } } else stack.push_back(run); run it-second; } else { if (run-sub_ptr.empty() || \0 ! run-sub_ptr.begin()-first) return false; leaf_father_point_to_leaf run-sub_ptr.begin(); break; } } if (leaf_father_point_to_leaf-first ! \0 strCompare(be_deleted, leaf_father_point_to_leaf-second-key_in_trie, i) ! Compare_Result::EQUAL) return false; } delete leaf_father_point_to_leaf-second; run-sub_ptr.erase(leaf_father_point_to_leaf); if (run ! root run-sub_ptr.size() 1 run-sub_ptr.begin()-second-type_flag TrieTreeNode::NodeType::DATANODE) { if (stop_branch_node-second ! run) { for (size_t j stack.size() - 1; j index; --j) delete stack[j]; delete stack[index]; } stop_branch_node-second run-sub_ptr.begin()-second; delete run; } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; pairmapchar, TrieTreeNode*::iterator, bool result; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { result run-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); if (result.second) return true; run result.first-second; i; } else { if (run-sub_ptr.empty() || run-sub_ptr.begin()-first ! \0) { run-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strCompare(be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; result.first-second new TrieTreeNode(); for (; start_index i; start_index) result.first result.first-second-sub_ptr.insert(make_pair(be_inserted[start_index], new TrieTreeNode())).first; } if (compare_result Compare_Result::LEFT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } else { result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } return true; } TrieTree::~TrieTree() { TrieTreeNode* run root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-sub_ptr.begin() run-sub_ptr.end()) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run work_stack.top().first; work_stack.top().second; //work_stack.top().second run-sub_ptr.erase(work_stack.top().second); trace_back_flag false; continue; } } work_stack.push(make_pair(run, run-sub_ptr.begin())); run run-sub_ptr.begin()-second; } else { if (run root || work_stack.top().second ! run-sub_ptr.end()) { if (run root) { if (work_stack.top().second root-sub_ptr.end()) { delete root; return; } } run work_stack.top().second-second; trace_back_flag true; } else { delete run; work_stack.pop(); run work_stack.top().first; work_stack.top().second; // work_stack.top().second run-sub_ptr.erase(work_stack.top().second); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-sub_ptr.begin() be_copied-sub_ptr.end()) break; copy_trace_stack.push(make_pair(root_of_copy, root_of_copy-sub_ptr.begin())); } else { if (work_stack.top().second ! work_stack.top().first-sub_ptr.begin()) copy_trace_stack.top().second; copy_trace_stack.top().second-second new TrieTreeNode(*be_copied); if (be_copied-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.push(make_pair(copy_trace_stack.top().second-second, copy_trace_stack.top().second-second-sub_ptr.begin())); else { be_copied work_stack.top().first; trace_back_flag false; continue; } } work_stack.push(make_pair(be_copied, be_copied-sub_ptr.begin())); be_copied be_copied-sub_ptr.begin()-second; } else { if (work_stack.top().second-second-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.pop(); if (be_copied root || (work_stack.top().second) ! be_copied-sub_ptr.end()) { if (be_copied root) { if ((work_stack.top().second) root-sub_ptr.end()) break; } be_copied work_stack.top().second-second; trace_back_flag true; } else { work_stack.pop(); be_copied work_stack.top().first; } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-sub_ptr.begin()-first \0) max_length 4; else max_length 1; for (mapchar, TrieTreeNode*::iterator run cur-sub_ptr.begin(); run ! cur-sub_ptr.end(); run) { for (size_t go 1; go offset; go) cout ; if (run-first \0) cout NULL; else { cout run-first; for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(run-second, offset 2 max_length); } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機字符串最大長度 const int r 2; //相同長度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }第二種實現(xiàn)分支節(jié)點使用數(shù)組保存前綴的索引#include map #include stack #include vector #include string #include iostream #include random #include tuple using namespace std; enum Compare_Result { EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL }; struct TrieTreeNode //Trie樹節(jié)點類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點類型標志分支節(jié)點或存放關(guān)鍵字的葉節(jié)點 struct BranchNode { vectorTrieTreeNode* sub_ptr; size_t num; BranchNode() :sub_ptr(128, nullptr), num(0){} BranchNode(const BranchNode B) :num(B.num), sub_ptr(128, nullptr) {} }; union { string key_in_trie; //葉節(jié)點關(guān)鍵字 BranchNode branch_ptr; //分支節(jié)點的分支字符和對應(yīng)的指向分支字符對應(yīng)的子節(jié)點的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), branch_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE:{ new (key_in_trie) string(be_copied.key_in_trie); break; } case NodeType::BRANCHNODE:{ new (branch_ptr) BranchNode(be_copied.branch_ptr); break; } } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: branch_ptr.~BranchNode(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } TrieTree(TrieTree be_copied) { root be_copied.copy(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-branch_ptr.num 0; } TrieTreeNode* getTrieTree() const { return root; } ~TrieTree(); private: template typename T Compare_Result static strCompare(const string left, const string right, T i); static size_t char_to_index(const char ch) { return ch; } TrieTreeNode* root; //Trie樹根節(jié)點 }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } template typename T Compare_Result TrieTree::strCompare(const string left, const string right, T i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; stackTrieTreeNode* work_stack; size_t index; { string::size_type i 0; while (run-type_flag TrieTreeNode::NodeType::BRANCHNODE) { if (i be_deleted.size()) { index char_to_index(be_deleted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) return false; i; work_stack.push(run); run run-branch_ptr.sub_ptr[index]; } else { if (run-branch_ptr.sub_ptr[0] nullptr) return false; work_stack.push(run); run run-branch_ptr.sub_ptr[0]; index 0; } } if (run ! work_stack.top()-branch_ptr.sub_ptr[0] strCompare(be_deleted, run-key_in_trie, i) ! Compare_Result::EQUAL) return false; } work_stack.top()-branch_ptr.sub_ptr[index] nullptr; delete run; --work_stack.top()-branch_ptr.num; if (work_stack.top() ! root work_stack.top()-branch_ptr.num 1) { for (index 0; index work_stack.top()-branch_ptr.sub_ptr.size(); index) { if (work_stack.top()-branch_ptr.sub_ptr[index] ! nullptr) break; } if (work_stack.top()-branch_ptr.sub_ptr[index]-type_flag TrieTreeNode::NodeType::DATANODE) { run work_stack.top()-branch_ptr.sub_ptr[index]; delete work_stack.top(); work_stack.pop(); while (work_stack.top() ! root) { if (work_stack.top()-branch_ptr.num 2) { work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[work_stack.size() - 1])] run; return true; } else { delete work_stack.top(); work_stack.pop(); } } work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[0])] run; } } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; size_t index; TrieTreeNode* father_of_leaf nullptr; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { index char_to_index(be_inserted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) { run-branch_ptr.sub_ptr[index] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } father_of_leaf run; run run-branch_ptr.sub_ptr[index]; i; } else { if (run-branch_ptr.sub_ptr[0] nullptr) { run-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strComparestring::size_type (be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[index] new TrieTreeNode(); for (; start_index i; start_index) { father_of_leaf-branch_ptr.num 1; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[start_index])] new TrieTreeNode(); } } if (compare_result Compare_Result::LEFT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } else { father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } father_of_leaf-branch_ptr.num 2; return true; } size_t find_next(TrieTreeNode* cur, size_t run) { for (; run cur-branch_ptr.sub_ptr.size(); run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) return run; } } TrieTree::~TrieTree() { TrieTreeNode* run root; stacktupleTrieTreeNode*, size_t, short work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-branch_ptr.num 0) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); trace_back_flag false; continue; } } work_stack.push(make_tuple(run, find_next(run, 0), 1)); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { if (run root || get2(work_stack.top()) ! run-branch_ptr.num) { if (run root) { if (get2(work_stack.top()) root-branch_ptr.num) { delete root; return; } } get2(work_stack.top()); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { delete run; work_stack.pop(); run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stacktupleTrieTreeNode*, size_t, short work_stack; stackTrieTreeNode* copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag) { if (be_copied-type_flag TrieTreeNode::BRANCHNODE) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-branch_ptr.num 0) { break; } copy_trace_stack.push(root_of_copy); } else copy_trace_stack.push(copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied)); work_stack.push(make_tuple(be_copied, find_next(be_copied, 0), 1)); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied); be_copied get0(work_stack.top()); trace_back_flag false; } } else { if (be_copied-branch_ptr.num ! get2(work_stack.top())) { get1(work_stack.top()) find_next(be_copied, get1(work_stack.top()) 1); get2(work_stack.top()); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { if (be_copied root) break; work_stack.pop(); be_copied get0(work_stack.top()); copy_trace_stack.pop(); } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-branch_ptr.sub_ptr[0] ! nullptr) max_length 4; else max_length 1; int count 0; for (size_t run 0; ; run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) { count; for (size_t go 1; go offset; go) cout ; if (run 0) cout NULL; else { cout static_castchar(run); for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(cur-branch_ptr.sub_ptr[run], offset max_length 2); if (count cur-branch_ptr.num) break; } } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機字符串最大長度 const int r 2; //相同長度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }每種實現(xiàn)應(yīng)該都能適用于空串的插入刪除自己沒有驗證過感興趣可自行驗證
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
香蕉国产2013| 亚洲综合99| 97婷婷五月| 综合激情视频| 我要色综合五月婷婷| 欧美人人超级碰| www.色五月| 成人色情五月天婷婷丁香| 九九艹女| 内射干少妇亚洲69XXX| 九九综合九色欧美狠狠| 五月天无码视屏播放| 另类图片五月天| 亚洲va综合va国产va中文| 日日日,com| 玖玖九九9999在线观看视频精品| 五月丁香六月婷综合成人综合| 日本色婷婷综合| 天堂网操| 人五月天婷婷喷水| 天天综合精品| 这里只有精品2| 久久机热这里只有| 五月激情网五月综合网| 亚洲激情亚洲激情| www.zbzhongsen.com| 怎么样可以看免费的一级av| 五月婷婷丁香五月| 久久视频这里有精品99| 九九九九毛片| 婷婷狠狠操| 这里只有精品免费视频| 丰满人妻一区二区三区| 色五月中文网| 激情五月综合| 日本色色网站| a久久| 激情丁香五月激情婷婷| 色五月久久成人婷婷| 色五月婷婷av| 色色网五月激情| 五月丁香六月综合情在线观看| www.91五月| 日本片日本片祼观看网站在线看中文版网页在线看 | 五月激情射| 狠狠色噜噜狠狠狠888| 色小说婷婷五月天天天| 亚州激情在线视频| 婷婷五月天黄色| 丁香五月婷婷激情完整版| 免费看欧美成人A片无码| 狠狠干婷婷| 99综合网| 婷婷四色五月| 久久综合激情| 老师的粉嫩小又紧水又多A片视频| 91美女被操| 夜夜撸天天操| 米奇激情婷婷| 婷婷色五月综合丁香| 99久久久久久| 国产片天天爽夜夜爽| 五月婷婷色播| 日本精品99| 久久婷婷亚洲| 九九热在线视频| 五月婷六月| 丁香五月欧美激情| 色99色| 深爱婷婷网| 久久久97| 天天插天天干| 91婷婷| 天天日天天做天天操| 亚洲激情淫网| 久久婷婷丁香六月天| 久久狠色噜噜狠狠狠狠97| 九九热这里只有精品首页| 亚洲激情综合色站| 五月综合婷婷久久在线| 色播播五月| 夜夜夜夜夜骑撸| 国产激情婷婷| 亚洲综合色婷婷| 国产FREESEXVIDEOS性中国| 国产精品色| 99久久久久| 深爱五月天| 黄色aaaaa| 五月丁香婷婷啪啪| 99热这里只有精品热| 五月天色综合服务平台| 五月丁香色综合| 综合伊人久久| 天天射影院| 色综合久久久无码中文字幕999| 九九无码AV| 欧美人人草草| 五月婷婷狠狠干| 天天插综合在线| 久色五月婷婷综合| 大香婷婷| 2025中文在线视频字幕免费观看| 99热这里只有精品一| 五月婷婷欧美激情| 婷婷草| 国产精品美女| 五月丁香| 色播五月综合网| 99re66热这里只有精品| 激情婷婷五月色| 五月婷视屏在线观看| 五月 成人 婷婷| 9久久精品| 久久99大| 天天舔天天插天天爱| 五月婷婷在线网站| 丁香六月啪啪啪| 成人短视频在线免费观看| 第四色五月婷婷| 天天久综合网永久入口17v| 五月天亚洲图片婷婷| 五月丁香激情综合欧美| 色色五月天婷婷丁香| 中文不卡一二区| 荷兰av一级| 99久久婷婷| 亚洲最大视频网站| 性小说五月天| 啪啪啪大香蕉| 97黑人精品区| 狠狠五月天激情| 久久99网站| 91n啪啪| 影音先锋男人女人| 综合性爱网| 日日夜夜青青草| 久草五月婷婷| Caop在线| 亚洲狠狠操| 久久精品这里只有精品免费首页| 欧美性猛交99久久久久99按摩| 午夜微拍福利| 丁香婷婷免费| www五月| pom538精品视频| 丁香五月在线观看综合| 欧美三级A做爰在线观看| 欧美性猛交99久久久99| 色五月天婷婷| 五月婷色丁香| 亚洲另类噜噜| 狠狠插.com| 丁香六月综合激情| 综合激情啪啪| 婷婷五月成人| 99热久草| 超碰高清在线| 日韩国产AV播放| 久久色五月| 色色COm| 激情四射五月天| 91亚洲天堂| 都市激情蜜桃婷婷五月天 | 天堂久久婷婷| 26uuu丁香婷婷五月| 79精品视频| 色狠狠色噜噜AV天堂五区| 日韩精品999| 五月草视频| 成人做爰A片免费看视频| 婷婷欧美综合| 色婷婷狠狠爱| 五月六月丁香激情视频| 日韩成人AV在线| 久操人| 九九热经典视频在线观看| 丁婷婷五月天在线播放| yiqicaoav| 俺去也在线视频| 亚洲乱码日产精品BD| 亚洲激情网| 丁香色色色| 五月丁香久| 天天色天天操天天射| 超碰97在线观看免费| 九九婷婷五月天影视| 亚洲欧美成人在线| 九九热这里有精品23| 六月婷婷开心| 亚洲AAA| 精品夜夜澡人妻无码AV| 天天操夜夜爱| 91精品久久久久| 亚洲无码成人网| 99热这里只有精品免费| 好看的国产精品| 26.uuu丁香五月婷婷| 操日视频| 丁香六月激情| 五月六月婷婷| 亚洲综合视频网| 99ri精品| 秋霞午夜理论| 岛囯综合激情网| av性爱网站| 五月婷婷色色爱| 激情久久网 | 5月丁香六月婷婷| EEUSS鲁片一区二区三区| 操逼五月天| 色99热| 狠狠干2007| 欧美大片| 色综合色色色| 狠狠88综合久久久久噜噜噜| 六月丁香色色| tingting五月天亚洲| 五月丁香婷婷色啪| 婷婷激情五月天激情小说| 婷婷久久色| 超级碰碰碰97免费| 开心五月婷婷六月丁香| 91婷婷在线观看| 色色五月婷婷久久| 色五月婷婷激情五月| 免费在线观看av网站| 噜噜狠狠色综无码久久合欧美| 超碰99热精品| 噼里啪啦完整版中文在线观看| 五月婷婷啪啪| 九九人人精品| 日韩久久视频| 久久久久99精品成人片| 成人网站av免费网站推荐| 色综合久久久久| 四五月婷婷| 国产中文字幕在线视频免费观看| 亚洲AV成人在线| 日本五月视频| 综合五月草| 以及AA大片看看| 色婷婷久久综合| 激情丰满熟妇五月| 99久高清视频| 香蕉AV777XXX色综合一区| 五月婷婷av| 依人大香蕉| 久月久在线视频| 99日本在线| 五月婷婷,六月激情| 深爱五月激情五月| 亚洲激情五月| 精品综合五月| 26uuu美女三级视频| www.第四色99| 99热在线观看| 六月婷婷中文字幕| 色噜噜五月天| 五月婷婷丁香狠狠撸久久| 激情久久久久久| 婷婷五月花| 色婷婷88| 五月婷婷开心五月| 五月婷婷色综图片| 久久综合66| 97色婷婷| 精品久久久999| 六月婷婷国产| 色久五月| 五月天婷婷色播| AV在线免费播放| 婷婷天堂综合网| 亚洲乱码日产精品BD| 精品在线网站| 99男人的天堂| 婷婷伊人无码| 日韩亚洲视频| 激情婷婷丁香色五月| 麻豆AV一区二区三区| 久久五月丁香婷婷| 日本操碰碰| 色色色无码| 丁香五月天欧美在线| 久热这里只精品| 99免费偷拍视频| 亚洲精品第一国产综合亚AV | 日良久久| 天天色丁香| 丁香五月婷婷操逼| 久月婷婷| 亚洲欧美婷婷五月色综合| 五月丁香综合在线| 囯产精品久久欠久久久久久九大| 九九精品免费| 激情图片婷婷| 九九色热| 99精彩视频| 天天插天天爱| 人人操超碰| 日本欧美成人片AAAA| AV操逼网| 六月激情婷婷| 99九九久久| 开心婷婷五月| 777影视理论片大全在线观看| 亚洲最大视频| 成人午夜视频精品一区| 色综合99无码 | 人操91在线| 激情5月婷婷| 中国女人做爰A片| 五月丁香六月激情| 91久女| 91操黄| 色婷婷六月| 狠狠草狠狠草| 五月婷婷久久久| 色综合婷婷| 大香蕉啪啪啪| 九九99九九精品免费 | 亚洲无码成人网| 丁香六月天| 六月丁香五月婷婷| 五月丁香好婷婷A片网| 99热成人精品| 五月色天情| 99久久99热这里只有精品| 亚洲五月天另类小说图片| 日本三级日本三级99| 日本乱论99| 激情四射婷婷| 色欲丁香久久| 99无吗| 婷婷成人五月天| 色色五月丁香婷婷| 99热99艹在线观看| www91精品| WWW.99热| 婷香五月网在线| 五月天久久婷婷婷| 久色婷婷200| 国产精品爽爽久久久久久| 久久婷婷网站| 国自产拍偷拍精品啪啪一区二区| 色色网站在线| 五月综亚洲| 日逼免费视频| 久操大| 另类天堂| 日本欧特黄色刺激一区影视久精品无码| 国精产品一区一区三区免费视频| 天天操天天曰| 五月婷婷伊人久久| 米奇影视五月天| ss99热| 99热这里只有精彩| 五月天激情综合| 97超碰,人人舔,人人操,人人摸 | 国产色五月婷婷| 国产亚洲精品久久一区二区三区| 专区无日本视频高清8| 日韩天堂久久| 婷婷五月天,影院| 色婷婷婷婷| 99在线观看精品| 婷婷综合网| AV操一操| 亚洲av另类在线观看| 99九九精品视频| 亚洲五月天天| 六月婷婷av| 密着浓厚中出乚交尾GvG935| 国产 码在线成人网站| 色五狠狠| 狠狠操综合| 综合精品99| 五月激情另类| 五月天六月色| 爽极品色| 色五月婷婷一二| 中文字幕人成乱码在线观看| 九九热10| 免费视频99| 亚洲亚洲人成综合网络| 久久机热这里只有精品免费视频| 久久婷婷五月天| 婷婷五月花.97| 97香蕉久久超级碰碰高清版| 五月丁香777| 极品少妇XXXX精品少妇偷拍| 噜噜噜噜婷婷五月天| 99精品在这里| 日本久久九| 天天色99| 人操91在线| 九月丁香久久网| 97色热| 日本va视频| 99操碰| 色婷婷狠| 色综合色五月| 日熟女| 色综合色综合色综合| 九九色影院| 成人在线不卡| 色情丁香五月婷婷精品| 人橾人| 天天日,天天插| 久久六月综合| 婷婷天堂站| 美国不卡视频| 99视频只有精品| 麻豆WWWCOM内射软件| www.久久99| 亚洲中文字幕av| 欧美婷婷丁香五月社区| 国av网| 激情精品久久| 精品一二三区久久AAA片| 五月天婷婷黄色视频| 色99热| 海外网站专业操老外| 亚洲天堂aaa| 99网址在线观看| 丁香五月宝贝激情网| 日韩在线观看亚洲| 丁香婷婷在线| 99综合入口| 五月天深爱激情网| 9 9热这里有精品| 噜噜噜久久亚洲精品国产品91| 99视频这里有精品| 丁香六月五月婷婷| 久久桃花网色婷婷| 九九综合九| 99久久性爱| 五月丁香免费视频| 五月婷婷激情久久| 国产阿姨日皮艹逼内射视频 | 色色色com| 五月丁香六月合| 色色色色丁香| 99热这里只有精品1| 丁香五月最新网址| 美女天天爽| 国产67194| 9久久网| 丁香婷婷色五月合集| 亚洲综合色成丁香五月色| 国产在线另类五月婷婷| 26uuu最新地址| 丁香五月 无码| 九九免费视频| 婷婷色九月| 99九九精品| 九九综合视频在线观看| 激情五月天在线视频| 97爱综合| 第四色五月天| 亚洲婷婷五月天激情综合| 在线五月婷| 99热思思| 热久久思思热思思| 色八戒操婷婷| 337p大胆噜噜噜噜噜91Av| 五月丁香大香蕉| 激情五月五月婷婷| 五月婷婷丁香av| 99偷拍视频在线日本| 91碰碰| 伊人六月丁香婷婷| 久久九九精彩| AA片在线观看视频在线播放| 精品久久艹| 91n网站cad入口在线观看| 五月婷婷六月丁香综合| 亚洲天堂热| 久久精品国产一区二区三区四区| 五月天久久婷婷| 久久五月丁香| 91seAV| 嫩草视频在线观看| 久久 这里只有精品1| 五月天伊人久久| 亚洲精品婷婷| www.久热| 丁香六月婷婷高清| 免费黄色AV| 欧类av怡春院| 五月天色综合| 在线五月色播| 婷婷综合色图| 艹色18p| 丁香激情久久| 丁香婷婷视频| 深爱激情九九五月天| 丁香五月电影院在线观看| 九九激情网| 亚洲热久久| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 99热精品在线| 色综合另类| 四月婷婷五月色综合| 五月婷婷性爱网| 色婷婷小说网| 婷婷黄色| 五月天婷婷社区| 深爱开心五月天| 九九精品综合| 色色九区| 国产精品成人网址| 八戒青柠影视剧在线观看| 91青娱乐青青草| 色情综合网| 国产裸舞福利资源在线视频| 超碰97久久| 国模狼狼| 久久九网| 99久久婷婷精品视频| 婷婷色中文字幕| 天天做天天爱天天玩| 五月五丁香婷婷| 久久永久网址| 99精品久久久久久久婷婷久久| 久久这里只有精品热在99| 五月花免费视频| 丁香五月亚洲综合| 颜射 精品性爱av| 五月丁香A片| 9福利性视频欧美| 丁香综合久久| 久久丁香社| 成人精品视频99在线观看免费| 五月天另类小说| 久久狼人天堂| 色五XX| 日韩婷婷五月天| 精a品a视a频| 五月丁香色色网| 9久久久久| 婷婷97碰碰| 综合AV网| 99色人| 5月丁香美女影院| 久久九九99| 色五月婷婷在线| 五月花免费视频| VA色婷婷| www.婷婷| 婷婷成人基地| 色九九综合| 伊人五月天| 久久九九热视频| 91久久1118| 9l视频自拍九色9l视频自拍九色9l社区| 99热97| 美国十月色婷婷在线观看| 五月综合激情| 婷婷月综合| 五月色婷婷在线观看| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 偷拍九九五月丁香婷婷| 丁香影院五月综合| 欧美色偷拍| 婷婷五月无码| 综合久| 五月天色色激情综合| 日日干五月天婷婷| 97深爱伊人综合| 四色女婷婷| 国产色五月| 五月丁花六月丁香综合| 狠狠色噜噜狠狠色噜噜噜999| 亚洲亚洲人成综合网络 | 成人AV在线网站| 久久99综合| 九九精品热| 超极99精品| 久久五月天免费网站| 秋霞AV淫| 天天日人人| 婷婷五月天资源| 欧美成人va| 亚洲中文字幕av| 九九亚洲| 色婷婷www| 超碰99热精品| 五月天激情四射| 丁香五月天成人| 9久久精品视频| 久9免费视频| 五月综合亚洲色| 五月婷婷欲色| 99热爱爱干干日| 午夜性做爰电影| 色约约视频一区二区三区四区五区 | 少妇性按摩无码中文A片| 精品人妻一区二区| 亚洲成人在线观看网址| 成人做爰黄A片免费看直播室男男| 婷婷碰碰| 久久丁香五月综合六月激情红杏视频 | 久久东京热婷婷五月| 超碰人人在线| 欧美日韩成人高清在线| AV在线资源| 思思精品久久艹| 久操激情| 一起草性爱不卡视频| 狠狠干在线视频| 国产精品视频久久99| 天天色天天日| 亚洲性爱AV在线| 日韩成人电影在线播放| 亚洲成人AV在线| 久久这里只精品66| 婷婷五亚洲| 激情久久久久| 五月丁香啪啪网| 天天色凹凸| 五月丁香六月激情综合网| 99久久九九| 99自拍视频在线| 久草视频大香蕉99| 婷婷五月免费观看| 亚州色婷婷| .肏屄视频一区二区| 色婷婷中文字母五月丁香| 97色色色| 思思w99| 少妇综合网| 五月天激情综合网| 丁香五月激情澎湃一区| 五月婷婷AV| 大香蕉丁香五月| 五月婷婷深深爱爱| 狠狠五月激情丁香六月| 一区=区操屄高清大全av| 婷丁香久综合| 99热综合| 色逼综合网| 在线日韩av| 婷婷六月天精品| 爆乳熟妇一区二区三区爆乳照片| 日本44久久在线| 久去色色| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 综合超碰熟| 永久地址 色| 99热66| 亚洲色久| 97色干| 五月久久婷婷天堂视频| 五月婷婷在线免费| 亚洲人成网站999综合| 伊人五月人妻精品| 午夜69成人做爰视频| 内射在线CHINESE| 久久免费操| 日本99色| 六月婷婷综合激情| 五月天丁香婷| 色婷婷丁香综合中文字幕| 五月丁香婷婷六月| 噜噜五月天综合| site:ornaments52.com| 操逼五月婷婷| www.六月丁香看AV| 91精品国产综合久久久不卡电影| 五月婷婷色播网| 五月综合激情婷婷六月色窝| 丁香月五月天婷婷久久| 久久婷婷五月天| 日韩 欧美 国产 一区 二区| 热99色| 思思热久久阴99| 激情综合色播| 中国激情网| 久草五月| 五月天色综合服务平台| www.色五月| 婷婷激情五月天亚洲综合| 色婷婷小说| 色亚洲婷婷| 大香蕉久久视频久久视频| 丁香五月激情婷婷| 69人人操人人爽| 来吧亚洲综合网| WWW免费视频碰碰碰碰| www.91在线观看| 99视频久久| 开心五月天激情网| 五月天中文字幕在线婷婷| 九月丁香久久网| 天天色综网| 色综合香蕉| 色婷婷电影网| 丁香五月图片| 9精品久久999| 思思re99视频在线观看| 亚洲婷婷基地| 日本一级黄色电影| 天天色天天色天天色天天色天天色| 丁香五月花| 手机激情网| 91高潮喷水久久久久久久久| 伊人玖玖婷婷| 欧美狠狠草| 麻豆WWWCOM内射软件| 亚洲小说欧美激情| 光棍影院日韩精品| 99热激情| 狠狠色丁香久久婷婷综合五月| 婷五月天六| 成人短视频在线观看| 千人斩操逼| 日本在线观看91| 色五月开心五月激情五月| 综合在线观看99| 婷婷五月天播播| 99小视频| 在线sebiav精品视频| 久超超碰| 色五月成人婷婷| 婷婷丁香六月天激情四射网| 婷婷中文在线| www.夜夜騎夜夜狠| 欧洲精品爱爱| 亚洲乱码日产精品BD| 色五月婷婷五月天| 五月激情婷婷开心五月| 九九爱精品网站| 丁香五月天激情| 丁香五月停停av| 超碰免费人人| 韩日AV片| 色色色色五月| 五月天婷婷激情综合| 狠狠操之狠狠操| 色婷婷性爱| 五月婷婷六月激情| 五月天天天天天天天天天天天天天天天婷婷婷| 婷婷激情五月天天天开心| 97超碰欧美中文字幕| 狠狠干2007| 亚洲综合在线视频| 天天干天天做| 激情丁香婷婷六月天| 亚洲激情网| 色婷婷日本| 99热这里只是精品| 婷婷五月69| 国产乱轮一区二区三区| 婷婷五月天成人网| 色五月播五月| 九九热精品视频九九| 九九亚洲视频| 99热资源在线| 久草五月丁香婷婷综合| 婷婷五月天在线综合导航| 亚洲熟妇AV乱码在线观看| 这里只有精品无码| 人人人操97| 亚洲性图一区二区三区| 91在线视频综合| 操逼视频网址| 草草女人亚洲| 婷婷久久综合| 五月天开心激情综合网| 婷婷色五月婷| 99re鈥哸鈥唙| 五月婷高清视频| 久久免费精品小视频| 色色色色色色色色色色色色色97| 久久99草五月婷婷| 色婷网站| 久久久天堂国产精品女人| 久久激情五月婷婷| 99热综合色图| 99热只有| 六月婷婷色综合| 深爱婷婷丁香五月激情| 五月久久丁香| 色婷婷成人丁香| 99在线观看| 97热视频| 色色五月婷婷| 色噜噜婷婷| 超碰亚洲天堂| 成人网址在线观看| 91精品久久久久久久久| 中文字幕av亚洲| 性爱七区| 五月开心久久| 亚洲人人艹| 野外99热| 另类亚洲视频| 国产小网站| 成人色图情色成人网 www.5b5b5bcom 五月天 | 国产又爽又猛又粗的视频A片| www.色五月| 天天操天天干天天日| 色五月琪琪| 日本系列_4页_777FP| 欧美影院| 狠狠99| 人妻少妇色综合| 色在线99| 青草少妇激情| 热99免费在线| 婷婷伊人| 天天插综合| 99操视频| 狠狠色狠狠操| 国产成人精品123区免费视频| 国产精品久久久久久久久久免费| 人人操人av| 97婷婷色| 欧美日韓成人亚洲精品另类| 五月天婷婷在线观看精品男人| 天天干狠狠操| 亚洲激情97五月天| 九九这里只有精品| 五月天婷婷基地| 成片免费观看视频大全| 亚洲激情综合| 久久男人网婷婷| 99热精品99| 人妻爽爽爽久久久久久久久| 婷婷深爱五月亚洲综合| 99色色色色| 三级三久久线久久99久目本WW| 色情五月婷婷| 久久丁香网| 91色综合网| WWW.夜夜操.com| 色大综合| 人人操人人干AV| 久久五月丁香| 亚洲人成播放网站| 五月丁香六月色| 天堂草在线看www| 97影院一级片| 五月婷婷综合性爱噜噜| 五月丁香婷婷综合网色欲| 少妇AB又爽又紧无码网站| 99热最新精品| 91 久热| 国产又黄又爽又色的免费| 韩国真做片在线观看| aV直接看| 丁香婷婷欧美综合| 丁香五月婷婷亚洲另类| 国产裸舞表演WWWW| 丁香六月婷婷综合啪啪| 亚洲一区二区无码蜜乳av| 永久思思热在线| 亚洲激情丁香五月基地| 深爱丁香激情| 日本色色视频| 五月丁香影院 | 丁香五月天AV在线| 综合狠狠干| 五月天色五月| 在线99热| 99操不停| 99超级碰碰| 天天射天天射一道本日本社区 | 九九99久久| 玖玖热99| 国产精品大香蕉| ...婷婷国产成人亚洲日韩| 六月色色婷婷| 国产精品五月天婷婷| 久久久久人妻网址| 婷婷五月天视频| 99ri6在线视频| 天天做天天双| 在线观看免费狠狠色丁香香综合| 成人无码精品1区2区3区免费看 | 激情五月天网页| 天天爽夜爽| 97人碰人操| 丁香五月综合福利视频导航| 亚洲色A| 99九九在线| 婷婷五月天97干| 激情五月综合第一页| 婷婷色五月天第7色| 六月婷婷久久| 色综合视频在线| 俺也去综合| 亚洲三A| 亚洲操操| 97色在线观看视频| www.五月天色色色| 99色1| 99热免费| 99色综合网| 操碰99| 丁香五月天激情| 久久精品性爱| 久久视频这里都是精品| 大战熟女丰满人妻AV| 五月婷婷色吧!| 人人操91色| 日本一毛片| 在线婷婷| 亚洲亚洲人成综合网络| 婷婷丁香六月五月天| 六月色色| 丁香六月成人网| 伊人大香蕉综合在线| 五月天婷婷社区| 色噜久| AV色婷婷| 狠狠色丁香婷婷基地| 六月婷婷综合| 五月天久久婷婷| 色噜噜狠狠色综合网| 九九亚洲视频| 五月丁香综合激情网| 蜜臀99久久精品久久久久| 五月天网站亭亭| 久久久妻人人人| 少妇大叫太大太粗太爽了A片| 五月婷婷,六月激情| www.sebowuyue| 99色综合| 激情五月天之五月婷婷| 色色五月婷婷久久| 国产精品久久久久久久久久免费 | 狠狠一日| 丁香色婷婷| 久热最新视频 | 欧美婷| 婷婷丁香五月天婷婷| 99爱操| 亚洲热久久| 五月天狠狠干| 99热久久这里只有精品| 五月天婷婷免费| 99热很操老逼| 日韩成人中文| 久久九九99| 丁香六月婷| 成人五月丁香社区| 洗浴中心操B视频| 五月丁香趴趴| 五月天婷婷影院| 日韩在线9| 精品乱码久久久久| 婷婷爱五月| 亚洲网综合在线| 激情五月婷婷视频一区二区三区| 成人五月天在线视频在线观看| 欧美精品999| 色五月激情综合网站| 亚洲五月婷婷| 六月婷婷影院| 黄色片精品| 99热全是精品| 五月婷婷 自拍| 亚洲成人日韩无码精品| 色色性爱视频| 开心婷婷五月| 丁香五月在线播放| 欧美色色色| 六月丁香基地| 激情五婷精品网在线观看网址| 丁香五月婷婷Av| 日逼影音先锋AV男人资源站| 狼人久草| 在线播放人妻| 五月婷视频在线观看| 色五月综合97| 亚洲精品九九| 欲求不满的人妻| 婷婷的色色五月天| 国产一区18| 五月婷精品| 天天插天天日| 天久综合91综合首页| 色99欧洲色19| 久久婷婷五月综合色奶水99啪| 婷婷五月色情天| 亚洲色婷婷婷婷人人爽| 五月激情黄色小说| 久久这里只有精品1| 深爱激情五月网| 天天搞天天爽| 丁香五月天啪啪| 久久99热免费最新版| 狠狠色综合网| 婷婷五月天渟渟| 欧美碰碰碰| 大功率国产在线| 狠狠狠狠免费| 97人人操人人干| 婷婷六月激情| 成人五月天婷婷| 日本五月天一页| 久久这里只有精品99| 天天插天天干| 国产亚洲av片| 另类婷婷丁香| 蜜乳中文字| 精品久久9| 免费碰碰视频久| 婷婷伊人| 日日操天天爽| 激情AV在线| 99在线免费视频| 97碰91| 日日婷婷不卡| 大香蕉九九| 色吧网91| 黄色99视频| 五月天国产婷婷精品视频在线| 婷婷五月色惰| 丁香五月天日韩无码| 五月丁香综合网色欲| 久9精品视频| 人人操大| 久久er+| 五月婷婷激情综合| 综合啪啪| 色丁香五月天| 五月天婷婷社区久久综合| 99视频网| 31色区视频免费看| www.五月丁香av| 激情综合色五月丁香| 99久99热| 99精品国产在热久久| 婷婷五月激情的图片| 久热只有精品| 91九九九九| 五月婷婷免费| 亚洲六月婷婷| 久久多色| 激情综合色图| 五月婷九九草| 99热这里只有免费精品| 偷拍99在线视频观看| 狠狠人妻久久久久久综合丁香| 狠狠色色| 国产免费AV在线| 99色色色色| 综合色五月亭亭| 七七九九色色| 丁香六月综合| 久久ww| 五月婷婷激情网| 欧美精产国品一二三区| 亚洲第一黄网| 五月婷婷中文字幕| 九九热精品| 亚洲激情AV| 丁香五月婷婷啪啪| 色噜噜狠狠狠综合曰曰曰| 东京热人妻一区二区三区在线| 激情综合色婷婷啪啪六月天| 色五月,婷婷大香蕉| 五月天婷综合| 色色色在线播放| 综合五月激情| 丁香五月亚洲激情婷婷射| 91爱啪啪| 狠狠操之狠狠操| 伊大人久久| 超碰操网| 久久五月激情网| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 婷婷六月丁香五月图区| 丁香五月丁香伊人| 国产精品99久久久久久久女警| 色色cOm| 超碰A V在线| 大香蕉久久| 国熟女视频| 91久女| 九九这里都是精品| 激情综合综合综合| 久久色9| 激情五月天婷婷丁香| 啪啪干伊人婷婷| 美女视频图片久久91| 成片免费播放| www.婷婷六月天| 激情五月激情综合俺也去婷婷小说| 亚洲精品国产A久久久久久| 六月婷婷国产| 五月天激情小说婷婷| 欧美人与性动交CCOO| 91啪啪网| 五月婷婷欧美激情| 永久99免费视频网站| 久婷久婷| 色综啪啪网| 久碰视频| 丁香五月欧美| 激情99热| 综合五月丁香六月婷婷| 武汉美女啪啪视频免费一级片| 26.uuu丁香五月婷婷| 天天日日夜夜| 免费播放片大片| 天天色综合色| 亚洲成人高清在线| 江苏少妇性BBB搡BBB爽爽爽| 亚洲人人操BD| 97好吊操| 一夜福利不卡| 五月天亚洲最大成人| 国产综合丁香五月天| av在线免费播放观看| 成人国产欧美大片一区| 99热久久这里只有精品| 五月丁香在线| 99精品无码| 丁香五月婷婷色播艳门照| 六月丁香视频网站| 狠狠五月激情丁香六月| 五他月天啪啪啪| 国产肥白大熟妇BBBB视频| 99色热| 国产精品人成A片一区二区| 婷婷五月天久久久| 99自拍视频在线观看| 五月丁香婷婷网在线在线| 大香蕉久热| 91超级碰碰| 性五月激情| 婷婷久久综合久| 国产亚洲色婷婷久久99精品91| 婷婷中文字幕| 久久99热这里| 久久狠色噜噜狠狠狠狠97| 五月丁香五月激情综合色综合| 免费的日逼视频| 五月天婷爱综合| 亚洲狠狠狠| 激情五月婷黄版| 五月丁香啪啪啪| 久久怡红院| 男女av免费看| xx久久| 婷婷天天综合| 五月婷庭丁香在线| 婷婷五月电影院| 91丨九色丨白浆秘| 亚洲小说五月婷婷| 日逼免费视频| 婷婷五月天综合久久| 大香网伊人久久综合| 尤物一区二区| 五月丁香天堂网| 国产精品美女久久久久AV超清 | 丁香激情网| 色yeye欧美| 久久ER视频com| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 五月天丁香成人| 久久久久九九九九视屏小说88| 99久久精彩视频| 五月天色狠狠| 五月丁香激情深爱婷婷| 99精品免费| 色五月在线观看| 色婷五月天| 日本不卡一区二区三区| 欧美性爱中文字幕| 91精品国产综合久久久不卡电影| 久久天堂| 美女要搞搞天天搞搞搞网站| 婷婷开心激情| www激情| 丁香五月手机视频| 日韩欧美一区二区三区四区| 91大屁股精品| 久久您您综合网| 99久久丝| 丁香婷婷色五月| 狠狠色噜噜狠狠| 狠狠干综合网| 人与禽A片啪啪| 婷婷五月天在线综合导航| 涩综合网| 成人中文字幕在线| 五月婷婷五月丁香| Blackedraw视频一区二区| 激情精品久久| www.91色| 99热在线精品播放| 五夜丁香| 丁香五月中文字幕| 日日干夜夜干| 国产激情av| 狠狠爱激情网| xx久久| 久99久视频| 粉嫩av懂色av蜜臀av熟妇| 激情丁香社区| 五月总合激情网| 天天干天天插| oVV4WIB3vFi8D| 欧美精品XXXXBBBB| 99热最新地址在线| 这里只有精品免费观看网占| av操B网站| 五月丁香无码| 亚洲欧洲一二| 五月天激情网站| 综合久| 老师的粉嫩小又紧水又多A片视频| 激情五月丁香综合蜜桃| 国产伦亲子伦亲子视频观看| 丁香五月婷婷天激情| 美女xx不卡| 五月婷婷激情| 五月丁香六月婷婷玖玖| 97操碰人人| www.minyis.com【JT】实力收量可预付QQ2101460746 | 五月丁香激情综合| 日韩1区2区| 激情综合色网| 免费在线观看av网站| av在线中文| 激情婷婷人妻| 国产性爱一级| 国产精品色色| 五月丁香婷婷视频| 五月天婷婷网站| 欧美在线视频9| 日韩成人无码| 99在这里有精品| 五月婷婷新网站| 91猫咪国产在线播放| 99色干| 天天综合社区| 五月综合激情图片| 啪啪色区| 在线中文字幕免费视频| 丁香六月激情综合| 欧美五月婷婷| 精品九九婷婷| 亚洲国产精品VA在线看黑人| 天天日,天天干,天天操| 久久五月天精品视频| 色五月大| 五月天大香焦| 欧美性猛交99久久久久99按摩| 色色婷婷五月天| 久草视频一,二三四| 五月丁香啪啪伦理电影| 无码毛片992367| 丁香六月婷婷开心| 九九AV在线| 婷婷的久久网站| 九九超碰人人| 日韩成人影片在线观看| www99精品日韩| 色婷婷久久| 婷婷欧美|