树的非递归遍历——前序

非递归调用一般需要额外的栈辅助,具体实现为
1、先入根节点
2、访问top,pop
3、入当前节点的右节点
4、入当前节点的左节点
5、循环2-4

//前序遍历
void preorder(Node *root)
{
    if (root==NULL)
        return;
    cout<val<<" ";
    preorder(root->left);
    preorder(root->right);
}
//前序非递归实现,实现原理,先访问,右入栈,左入栈
void preorderloop(Node *root)
{
    if (root == NULL)
        return;
    stack sn;
    sn.push(root);
    while(sn.size())
    {
        Node *p = sn.top();
        sn.pop();
        cout<val<<" ";
        if (p->right)
            sn.push(p->right);
        if (p->left)
            sn.push(p->left);
    }
}

你可能感兴趣的:(树的非递归遍历——前序)