提交 590652f0 编写于 作者: 邹晓航

bug fix

上级 821dc0ff
......@@ -93,7 +93,7 @@ namespace TinySTL{
const T *ptr_;
cntrPtr container_;
stack<const T *> parent_;//保存从root到ptr_的父节点的路径
std::set<const T *> rvisited_;//当前节点的右子树是否被访问过
//std::set<const T *> rvisited_;//当前节点的右子树是否被访问过
std::set<const T *> visited_;//当前节点是否被访问过(此node被访问说明其左子树已被访问了)
public:
bst_iter(const T *ptr, cntrPtr container);
......
......@@ -12,6 +12,8 @@ namespace TinySTL{
while (temp && temp != ptr_ && temp->data_ != ptr_->data_){
parent_.push(temp);
if (temp->data_ < ptr_->data_){
//temp向右走说明temo指向的父节点不需要再次访问了
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_);//此node被访问
if (ptr_->right_){//此node还有右子树
rvisited_.insert(ptr_);
//rvisited_.insert(ptr_);
parent_.push(ptr_);
ptr_ = ptr_->right_;
while (ptr_ && ptr_->left_){
parent_.push(ptr_);
ptr_ = ptr_->left_;
}
}
else{//node无右子树则只能向父节点路径移动
}else{//node无右子树则只能向父节点路径移动
ptr_ = 0;//add 2015.01.14
while (!parent_.empty()){
ptr_ = parent_.top();
parent_.pop();
if (visited_.count(ptr_) == 0){//父节点尚未访问
if (visited_.count(ptr_) == 0){//父节点尚未访问,此时ptr_指向此节点
visited_.insert(ptr_);
break;
}
else if (rvisited_.count(ptr_) == 0){//父节点的右子树尚未被访问
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;//设为哨兵
}//end of while
}//end of if
return *this;
}
template<class T>
......
......@@ -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);
......
......@@ -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();
}
......
......@@ -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" />
......
......@@ -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" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册