This commit is contained in:
邹晓航
2015-01-14 15:48:40 +08:00
parent 821dc0ffe4
commit 590652f0ab
6 changed files with 72 additions and 27 deletions

View File

@@ -93,7 +93,7 @@ namespace TinySTL{
const T *ptr_;
cntrPtr container_;
stack<const T *> parent_;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>root<6F><74>ptr_<72>ĸ<EFBFBD><C4B8>ڵ<EFBFBD><DAB5><EFBFBD>·<EFBFBD><C2B7>
std::set<const T *> rvisited_;//<2F><>ǰ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񱻷<C7B7><F1B1BBB7>ʹ<EFBFBD>
//std::set<const T *> rvisited_;//<2F><>ǰ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񱻷<C7B7><F1B1BBB7>ʹ<EFBFBD>
std::set<const T *> visited_;//<2F><>ǰ<EFBFBD>ڵ<EFBFBD><DAB5>Ƿ񱻷<C7B7><F1B1BBB7>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>node<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>
public:
bst_iter(const T *ptr, cntrPtr container);

View File

@@ -12,6 +12,8 @@ namespace TinySTL{
while (temp && temp != ptr_ && temp->data_ != ptr_->data_){
parent_.push(temp);
if (temp->data_ < ptr_->data_){
//temp<6D><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>temoָ<6F><D6B8><EFBFBD>ĸ<EFBFBD><C4B8>ڵ㲻<DAB5><E3B2BB>Ҫ<EFBFBD>ٴη<D9B4><CEB7><EFBFBD><EFBFBD><EFBFBD>
visited_.insert(temp);//add 2015.01.14
temp = temp->right_;
}
else if (temp->data_ > ptr_->data_){
@@ -23,37 +25,25 @@ namespace TinySTL{
bst_iter<T>& bst_iter<T>::operator ++(){
visited_.insert(ptr_);//<2F><>node<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (ptr_->right_){//<2F><>node<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rvisited_.insert(ptr_);
//rvisited_.insert(ptr_);
parent_.push(ptr_);
ptr_ = ptr_->right_;
while (ptr_ && ptr_->left_){
parent_.push(ptr_);
ptr_ = ptr_->left_;
}
}
else{//node<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>򸸽ڵ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
}else{//node<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>򸸽ڵ<F2B8B8BD>·<EFBFBD><C2B7><EFBFBD>ƶ<EFBFBD>
ptr_ = 0;//add 2015.01.14
while (!parent_.empty()){
ptr_ = parent_.top();
parent_.pop();
if (visited_.count(ptr_) == 0){//<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
if (visited_.count(ptr_) == 0){//<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>,<2C><>ʱptr_ָ<5F><D6B8><EFBFBD>˽ڵ<CBBD>
visited_.insert(ptr_);
break;
}
else if (rvisited_.count(ptr_) == 0){//<2F><><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rvisited_.insert(ptr_);
if (ptr_->right_){
parent_.push(ptr_);
ptr_ = ptr_->right_;
while (ptr_ && ptr_->left_){
parent_.push(ptr_);
ptr_ = ptr_->left_;
}
}
}
ptr_ = 0;
}
}
ptr_ = 0;//<2F><>Ϊ<EFBFBD>ڱ<EFBFBD>
}//end of while
}//end of if
return *this;
}
template<class T>

View File

@@ -36,7 +36,7 @@ namespace TinySTL{
std::vector<int> v;
std::random_device rd;
for (auto i = 0; i != 10; ++i){
for (auto i = 0; i != 100; ++i){
auto r = rd() % 65536;
bst.insert(r);
v.push_back(r);

View File

@@ -16,6 +16,10 @@ namespace TinySTL{
template<class T>
using tsBst = TinySTL::binary_search_tree < T > ;
void testCase1();
void testCase2();
void testCase3();
void testCase4();
void testAllCases();
}

View File

@@ -79,13 +79,16 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Alloc.cpp" />
<ClCompile Include="Detail\Alloc.cpp" />
<ClCompile Include="Detail\String.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="Profiler\Profiler.cpp" />
<ClCompile Include="String.cpp" />
<ClCompile Include="Test\AlgorithmTest.cpp" />
<ClCompile Include="Test\BinarySearchTreeTest.cpp" />
<ClCompile Include="Test\BitmapTest.cpp" />
<ClCompile Include="Test\CircularBufferTest.cpp" />
<ClCompile Include="Test\DequeTest.cpp" />
<ClCompile Include="Test\ListTest.cpp" />
<ClCompile Include="Test\PairTest.cpp" />
<ClCompile Include="Test\PriorityQueueTest.cpp" />
<ClCompile Include="Test\QueueTest.cpp" />
@@ -104,6 +107,12 @@
<ClInclude Include="CircularBuffer.h" />
<ClInclude Include="Construct.h" />
<ClInclude Include="Deque.h" />
<ClInclude Include="Detail\BinarySearchTree.impl.h" />
<ClInclude Include="Detail\Bitmap.impl.h" />
<ClInclude Include="Detail\CircularBuffer.impl.h" />
<ClInclude Include="Detail\Deque.impl.h" />
<ClInclude Include="Detail\List.impl.h" />
<ClInclude Include="Detail\Vector.impl.h" />
<ClInclude Include="Functional.h" />
<ClInclude Include="Iterator.h" />
<ClInclude Include="List.h" />
@@ -114,8 +123,11 @@
<ClInclude Include="String.h" />
<ClInclude Include="SuffixArray.h" />
<ClInclude Include="Test\AlgorithmTest.h" />
<ClInclude Include="Test\BinarySearchTreeTest.h" />
<ClInclude Include="Test\BitmapTest.h" />
<ClInclude Include="Test\CircularBufferTest.h" />
<ClInclude Include="Test\DequeTest.h" />
<ClInclude Include="Test\ListTest.h" />
<ClInclude Include="Test\PairTest.h" />
<ClInclude Include="Test\PriorityQueueTest.h" />
<ClInclude Include="Test\QueueTest.h" />

View File

@@ -22,6 +22,9 @@
<Filter Include="ScreenShots">
<UniqueIdentifier>{f20d9032-1c1d-424a-a8aa-f39c87789d3b}</UniqueIdentifier>
</Filter>
<Filter Include="Detail">
<UniqueIdentifier>{7dd5c5f0-33b6-44c6-b2b9-d4c0ec1d4c13}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Profiler\Profiler.cpp">
@@ -60,11 +63,20 @@
<ClCompile Include="Test\CircularBufferTest.cpp">
<Filter>Test</Filter>
</ClCompile>
<ClCompile Include="Alloc.cpp">
<Filter>头文件</Filter>
<ClCompile Include="Test\DequeTest.cpp">
<Filter>Test</Filter>
</ClCompile>
<ClCompile Include="String.cpp">
<Filter>头文件</Filter>
<ClCompile Include="Test\ListTest.cpp">
<Filter>Test</Filter>
</ClCompile>
<ClCompile Include="Detail\Alloc.cpp">
<Filter>Detail</Filter>
</ClCompile>
<ClCompile Include="Detail\String.cpp">
<Filter>Detail</Filter>
</ClCompile>
<ClCompile Include="Test\BinarySearchTreeTest.cpp">
<Filter>Test</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -167,6 +179,33 @@
<ClInclude Include="Test\CircularBufferTest.h">
<Filter>Test</Filter>
</ClInclude>
<ClInclude Include="Test\DequeTest.h">
<Filter>Test</Filter>
</ClInclude>
<ClInclude Include="Test\ListTest.h">
<Filter>Test</Filter>
</ClInclude>
<ClInclude Include="Detail\Deque.impl.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Detail\Bitmap.impl.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Detail\CircularBuffer.impl.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Detail\Vector.impl.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Detail\List.impl.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Test\BinarySearchTreeTest.h">
<Filter>Test</Filter>
</ClInclude>
<ClInclude Include="Detail\BinarySearchTree.impl.h">
<Filter>Detail</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\README.md" />