æ们çæ°æ®ç»æå®éªä¹æ¯è¿é¢ï¼éè¦æææçå®éªæ¥åç»ä½ åèä¸ä¹ï¼
æè¿éå°±åªåè¿é¨åç代ç ã
Status PreOrderTraverse(BiTree T)
{
//å
åºéåäºåæ Tçéå½ç®æ³
if (T)
{
printf("%d ",T->data);
if(T->lchild) PreOrderTraverse(T->lchild);
if(T->rchild) PreOrderTraverse(T->rchild);
return FALSE;
}
else return OK;
}
Status PreOrder(BiTree T)
{
//å
åºéåäºåæ Tçééå½ç®æ³
while(!(T==NULL&&top==NULL))
{
if(T)
{
printf("%d ",T->data);
push(T);
T=T->lchild;
}
else
{
T=(BiTree)pop();
T=T->rchild;
}
}
}
Status InOrderTraverse(BiTree T)
{
//ä¸åºéåäºåæ Tçéå½ç®æ³
if (T)
{
if (T->lchild) InOrderTraverse(T->lchild);
printf("%d ",T->data);
if (T->rchild) InOrderTraverse(T->rchild);
return FALSE;
}
else return OK;
}
Status InOrder(BiTree T)
{
//ä¸åºéåäºåæ Tçééå½ç®æ³
while(!(T==NULL&&top==NULL))
{
while(T)
{
push(T);
T=T->lchild;
}
T=(BiTree)pop();
printf("%d ",T->data);
T=T->rchild;
}
}
Status PostOrderTraverse(BiTree T)
{
//ååºéåäºåæ Tçéå½ç®æ³
if (T)
{
if (T->lchild) PostOrderTraverse(T->lchild);
if (T->rchild) PostOrderTraverse(T->rchild);
printf("%d ",T->data);
return FALSE;
}
else return OK;
}
Status PostOrder(BiTree T)
{
//ååºéåäºåæ Tçéå½ç®æ³
unsigned sign;//è®°å½ç»ç¹ä»æ ä¸å¼¹åºç次æ°
while(!(T==NULL&&top==NULL))
{
if(T)
{
push(T);//第ä¸æ¬¡éå°ç»ç¹Tæ¶åå
¥å
¶æé
push(1);//ç½®æ å¿ä¸º1
T=T->lchild;
}
else
{
while(top)
{
sign=pop();
T=(BiTree)pop();
if(1==sign)//表示走è¿Tçå·¦åæ
{
push(T);
push(2);
T=T->rchild;
break;
}
else
{
if(2==sign)//表示Tçå·¦å³åæ é½å·²èµ°è¿
{
printf("%d ",T->data);
T=NULL;
}
}
}
}
}
}
追é®è°¢è°¢ï¼ä¸è¿ä½ è¿ä¸ªä¸å®æ´åãè½åä¸ä¸ªå®æ´çè¿æ¥ä¹ï¼éº»ç¦äºã