二叉树的前序非递归遍历算法
1 typedef struct node{ 2 DataType data; 3 struct node * lchild,*rchild; 4 }BinTNode;//节点类型 5 typedef BinTNode* BinTree;
void PreOrder(BinTree BT){ stack s;
BinTree p=BT; while(p!=NULL||!isEmpty(s))
{
if(p!=null){
printf("%c",p->data);
push(s,p);
p=p->lchild;
}else{
p=top(s);
p=p->rchild;
pop(s);
} } }
基本思想:
(1)当树非空时,将指针p指向根节点,p为当前节点指针。
(2)先访问当前节点p,并将当前节点压入栈s中。
(3)另指针p指向其左孩子。
(4)重复执行步骤(2)(3)直到p为空为止。
(5)从栈s中取出栈顶元素,并将p指向其右孩子,然后释放栈顶元素。
(6)重复执行(2)(3)(4)(5),直到p为空并且栈s为空。
(7)遍历结束。
浙公网安备 33010602011771号