非递归先序
void nicePreOrder(treeNode* s)//非递归先序
{
if (s == NULL)
{
return;
}
stack<treeNode*> st;
while (s != NULL || !st.empty())
{
while (s != NULL)
{
cout << s->data << " ";
st.push(s);
s = s->left;
}
treeNode* tmp = st.top();
st.pop();
s = tmp->right;
}
}
非递归中序
void niceInOrder(treeNode* s)//非递归中序
{
if (s == NULL)
{
return;
}
stack<treeNode*> st;
while (!st.empty() || s != NULL)
{
while (s != NULL)
{
st.push(s);
s = s->left;
}
treeNode* tmp = st.top();
st.pop();
cout << tmp->data << " ";
s = tmp->right;
}
}
非递归后序
void nicePastOrder(treeNode* s)//非递归后序遍历
//左右中
{
if (s == NULL)
{
return;
}
stack<treeNode*> st;
treeNode* tag = NULL;
while (s != NULL || !st.empty())
{
while (s != NULL)
{
st.push(s);
s = s->left;
}
treeNode* tmp = st.top();
st.pop();
if (tmp->right == NULL || tmp->right == tag)
{
cout << tmp->data << " ";
tag = tmp;
tmp = NULL;
}
else//发现该结点右边还有未访问的结点
{
st.push(tmp);
s = tmp->right;
}
}
}