非递归调用一般需要额外的栈辅助,具体实现为
1、先入根节点
2、访问top,pop
3、入当前节点的右节点
4、入当前节点的左节点
5、循环2-4
//前序遍历
void preorder(Node *root)
{
if (root==NULL)
return;
cout<<root->val<<" ";
preorder(root->left);
preorder(root->right);
}
//前序非递归实现,实现原理,先访问,右入栈,左入栈
void preorderloop(Node *root)
{
if (root == NULL)
return;
stack<Node *> sn;
sn.push(root);
while(sn.size())
{
Node *p = sn.top();
sn.pop();
cout<<p->val<<" ";
if (p->right)
sn.push(p->right);
if (p->left)
sn.push(p->left);
}
}
网友评论