void PrevOrder_NonR()//非递归前序遍历
{
if (_root == NULL)
return;
stack<Node*> s;
Node* cur = _root;
while ((cur != NULL) || (!s.empty()))
{
while (cur)
{
s.push(cur);
cout << cur->_date << " ";
cur = cur->_left;
}
cur = s.top();
s.pop();
cur = cur->_right;
}
cout << endl;
}
void InOrder_NonR()//非递归中序遍历
{
if (_root == NULL)
return;
stack<Node*> s;
Node* cur = _root;
while ((cur != NULL) || (!s.empty()))
{
while (cur)
{
s.push(cur);
cur = cur->_left;
}
cur = s.top();
cout << cur->_date << " ";
s.pop();
cur = cur->_right;
}
cout << endl;
}
void PostOrder_NonR()//非递归后序遍历
{
if (_root == NULL)
return;
stack<Node*> s;
Node* cur = _root;
Node* prev = NULL;//记录上一个访问到的节点
while ((cur != NULL) || (!s.empty()))
{
while (cur)//循环到最左边的节点
{
s.push(cur);
cur = cur->_left;
}
Node* top = s.top();
if (top->_right == NULL || top->_right == prev)//如果top的右节点为空或者访问过,则可以访问此节点
{
cout << top->_date<<" ";
s.pop();
prev = top;
}
else
{
cur = top->_right;//访问右边
}
}
cout << endl;
}
二叉树的非递归遍历
最新推荐文章于 2022-10-18 10:02:18 发布