前序遍历
递归算法:
void RECUR_PREORDER(BTREE T)
{
if(T){
VISIT(T);
PREORDER(T->lchild);
PREORDER(T->rchild);
}
}
非递归算法:
核心思想:设置一活动指针p,当p不为空时,先访问p节点,然后将p压入栈中,最后p指向其左孩子。当p为空时,则从栈中退出栈顶元素送p,然后再将p指向节点的右孩子。重复上述过程,直到p为空且栈也为空。
void PREORDER(BTREE T)
{
BTREE stack[MAXSIZE],p = T;
int top= -1;
if(T){
do{
while(p!= NULL){
printf("%d",p->data);
stack[++top] == p;
p = p->lchild;
}
p = stack[top--];