二叉树非递归遍历算法(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;
    }
  }
}

posted @ 2011-04-08 17:03  lightex  阅读(796)  评论(0)    收藏  举报