From f3f94fcf330ca2405a23dddeac86abf11982efab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Wed, 29 Oct 2014 09:37:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=904=E7=A7=8D=E9=81=8D=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TinySTL/AVLTree.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/TinySTL/AVLTree.h b/TinySTL/AVLTree.h index 2d0fba9..0f40bf8 100644 --- a/TinySTL/AVLTree.h +++ b/TinySTL/AVLTree.h @@ -3,6 +3,7 @@ #include "Allocator.h" #include "Stack.h" +#include "String.h" #include @@ -31,6 +32,7 @@ namespace TinySTL{ typedef T value_type; typedef avl_iter const_iterator; typedef const T& const_reference; + typedef size_t size_type; private: node *root_; size_t size_; @@ -51,6 +53,11 @@ namespace TinySTL{ const_iterator find_min(); const_iterator find_max(); const_iterator find(const T& val); + + void print_preorder(const string& delim = " ", std::ostream& os = std::cout)const; + void print_inorder(const string& delim = " ", std::ostream& os = std::cout)const; + void print_postorder(const string& delim = " ", std::ostream& os = std::cout)const; + void print_levelorder(const string& delim = " ", std::ostream& os = std::cout)const; private: void destroyAndDeallocateAllNodes(node *p){ if (p != 0){ @@ -63,8 +70,62 @@ namespace TinySTL{ const_iterator find_min_aux(const node *ptr); const_iterator find_max_aux(const node *ptr); const_iterator find_aux(const T& val, const node *ptr); + void print_preorder_aux(const string& delim, std::ostream& os, const node *ptr)const; + void print_inorder_aux(const string& delim, std::ostream& os, const node *ptr)const; + void print_postorder_aux(const string& delim, std::ostream& os, const node *ptr)const; };// end of avl_tree template + void avl_tree::print_preorder_aux(const string& delim, std::ostream& os, const node *ptr)const{ + if (ptr != 0){ + os << ptr->data_ << delim; + print_preorder_aux(delim, os, ptr->left_); + print_preorder_aux(delim, os, ptr->right_); + } + } + template + void avl_tree::print_preorder(const string& delim, std::ostream& os)const{ + print_preorder_aux(delim, os, root_); + } + template + void avl_tree::print_inorder_aux(const string& delim, std::ostream& os, const node *ptr)const{ + if (ptr != 0){ + print_inorder_aux(delim, os, ptr->left_); + os << ptr->data_ << delim; + print_inorder_aux(delim, os, ptr->right_); + } + } + template + void avl_tree::print_inorder(const string& delim, std::ostream& os)const{ + print_inorder_aux(delim, os, root_); + } + template + void avl_tree::print_postorder_aux(const string& delim, std::ostream& os, const node *ptr)const{ + if (ptr != 0){ + print_postorder_aux(delim, os, ptr->left_); + print_postorder_aux(delim, os, ptr->right_); + os << ptr->data_ << delim; + } + } + template + void avl_tree::print_postorder(const string& delim, std::ostream& os)const{ + print_postorder_aux(delim, os, root_); + } + template + void avl_tree::print_levelorder(const string& delim, std::ostream& os)const{ + auto temp = root_; + if (temp != 0){ + std::deque q; + q.push_back(temp); + while (!q.empty()){ + temp = q.front(); + q.pop_front(); + os << temp->data_ << delim; + if (temp->left_ != 0) q.push_back(temp->left_); + if (temp->right_ != 0) q.push_back(temp->right); + } + } + } + template typename avl_tree::const_iterator avl_tree::find_aux(const T& val, const node *ptr){ while (ptr != 0){ if (ptr->data_ < val)