二叉树先序中序后序遍历递归和非递归算法

void PreOrder( BTNode *T)   //先序

{

if(T != NULL)

       {

printf("%c",T - > data);

PreOrder(T -> lchild);

PreOrder(T -> rchild);

}

}

void PreOrder( BTNode *T)   //先序 非递归

{ BTNode *p;

InitStack(s); //   初始化栈

p = T;  //p指向根节点

while(p || !StackEmpty(s))

{

if(p)

{

pop(S,p);  //将p压栈

if(p != NULL )

{

                         printf("%c",p - > data);

}

p = p - > lchild;

}

else

{

pop(S,p);

p = p - >rchild;

}

}

}




void InOrder( BTNode *T)   //中序

{

if(T != NULL)

       {

InOrder(T -> lchild);

printf("%c",T - > data);

InOrder(T -> rchild);

}

}


void InOrder( BTNode *T)   //中序 非递归

{ BTNode *p;

InitStack(s); //   初始化栈

p = T;  //p指向根节点

while(p || !StackEmpty(s))

{

if(p)

{

pop(S,p);  //将p压栈

p = p - > lchild;

}

else

{

pop(S,p);

if(p != NULL )

{

                        printf("%c",p - > data);

}

p = p - >rchild;

}

}

}


void PostOrder( BTNode *T)   //后序

{

if(T != NULL)

       {

PostOrder(T -> lchild);

PostOrder(T -> rchild);

printf("%c",T - > data);

}

}


你可能感兴趣的:(遍历)