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