非递归方式二叉树的中序遍历,其思想和非递归深度优先,广度优先遍历是一样的。通过使用一个栈来记录回溯的地址。
这个方法需要在二叉树的节点类上面多增加一个标志位bool status, 初始为false, 如果该节点被终端输出了,则设置成true, 以后回溯是变不再考虑。
template<class T>
class Node{
public:
T value;
Node* left;
Node* right;
bool status;
public:
//constructors
....
};
void mid(Node* r)
{
stack<Node*> s;
s.push_back(r);
while(!s.empty())
{
Node* p = s.pop();
if(p->left!=NULL && *(p->left).status != true)
{
s.push_back(p);
s.push_back(p->left);
}
else
{
cout<<p->value<<endl;
p->status = true;
if(p->right != NULL)
s.push_back(p->right);
}
}
}