二叉树非递归遍历算法(II)中序
void InOrder_NoRecursion(TreeNode *root)
{
BiTreeStack s;
// 还有未访问节点
while(root != NULL || !s.empty())
{
// 当前节点没有访问
if (root != NULL)
{
// 左孩子非空,该节点入栈,向左孩子移动
if (root->left != NULL)
{
s.push(root);
root = root->left;
}
// 左孩子已经遍历完,遍历该节点,转到右孩子
else
{
VisitNode(root);
root = root->right;
}
}
// 一个节点的左子树完全遍历后,此节点出栈,访问然后转到右孩子
else
{
root = s.top();
s.pop();
VisitNode(root);
root = root->right;
}
}
}