#include <iostream>
#include <stack>
#include <vector>
struct TreeNode
{
int data;
TreeNode* left;
TreeNode* right;
TreeNode() {}
TreeNode(int d, TreeNode* l, TreeNode* r)
{
data = d;
left = l;
right = r;
}
};
class TreeNodeIterator
{
public:
TreeNode* operator*() { return curNode; }
TreeNodeIterator(TreeNode* root)
{
if (root)
{
while (root)
{
stk.push(root);
root = root->left;
}
curNode = stk.top();
}
else
{
curNode = NULL;
}
}
bool hasNext() { return !stk.empty(); }
TreeNode* getCur()
{
return curNode;
}
TreeNode* next()
{
if (!hasNext()) return NULL;
TreeNode* cur = stk.top();
stk.pop();
// if current node has right child
cur = cur->right;
if (cur)
{
while (cur)
{
stk.push(cur);
cur = cur->left;
}
}
if (!stk.empty())
{
curNode = stk.top();
return stk.top();
}
else
return NULL;
}
private:
std::stack<TreeNode*> stk;
TreeNode* curNode;
};
int main()
{
TreeNode* n6 = new TreeNode(6, NULL, NULL);
TreeNode* n5 = new TreeNode(5, n6, NULL);
TreeNode* n4 = new TreeNode(4, n5, NULL);
TreeNode* n3 = new TreeNode(3, NULL, n4);
TreeNode* n2 = new TreeNode(2, n3, NULL);
TreeNode* n1 = new TreeNode(1, n2, NULL);
TreeNodeIterator it(n1);
while (it.hasNext())
{
std::cout << it.getCur()->data << " ";
it.next();
}
return 0;
}
Binary tree inorder iterator
最新推荐文章于 2021-02-16 03:26:06 发布