二叉树非递归遍历算法(I)前序

#include <stack>
using namespace std;
typedef stack<TreeNode*> BiTreeStack;

// 前序遍历

void PreOrder_NoRecursion(TreeNode *root)
{
  BiTreeStack s;

  // 还有未访问节点
  while(root != NULL || !s.empty())
  {
    // 当前节点没有访问
    if (root != NULL)
    {
      // 访问节点
      VisitNode(root);
      // 保存右子节点
      if (root->right != NULL)
      {
        s.push(root->right);
      }      

      // 移动到左孩子
      root = root->left;
    }

    // 当前节点及其左子树已经都访问过了,开始访问右子树
    else
    {
      root = s.top();
      s.pop();

    }
  }
}

 
posted @ 2011-04-07 16:27  lightex  阅读(228)  评论(0)    收藏  举报