二叉树的遍历用递归来实现相当简单,前面已经有文章讨论过,下面来讨论一下二叉树前序遍历的非递归实现。
二叉树的非递归前序遍历主要用栈来实现。根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历,先序遍历具体代码如下:
void PrePrint(struct TreeNode *r)
{
struct stack stack1; //创建一个栈
stack1.top = &stack1.node[0]; //初始化栈指针
struct TreeNode *p =r; //树的根节点设为p
while(p||!isEmpty(&stack1))
{
if(p!=NULL)
{
printf("%d ",p->data);
push(&stack1,p);
p = p->left;
}
else
{
p=pop(&stack1);
p=p->right;
}
}
}