å
åºééå½ç®æ³
ãæè·¯ã
å设ï¼Tæ¯è¦éåæ çæ ¹æéï¼è¥T != NULL
对äºééå½ç®æ³ï¼å¼å
¥æ 模æéå½å·¥ä½æ ï¼åå§æ¶æ 为空ã
é®é¢ï¼å¦ä½ç¨æ æ¥ä¿åä¿¡æ¯ï¼ä½¿å¾å¨å
åºéåè¿å·¦åæ åï¼è½å©ç¨æ 顶信æ¯è·åTçå³åæ çæ ¹æéï¼
æ¹æ³1ï¼è®¿é®T->dataåï¼å°Tå
¥æ ï¼éåå·¦åæ ï¼éåå®å·¦åæ è¿åæ¶ï¼æ 顶å
ç´ åºä¸ºTï¼åºæ ï¼åå
åºéåTçå³åæ ã
æ¹æ³2ï¼è®¿é®T->dataåï¼å°T->rchildå
¥æ ï¼éåå·¦åæ ï¼éåå®å·¦åæ è¿åæ¶ï¼æ 顶å
ç´ åºä¸ºT->rchildï¼åºæ ï¼éå以该æéä¸ºæ ¹çåæ ã
ãç®æ³1ã
void PreOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ // åºäºæ¹æ³ä¸ï¼æµç¨å¾å¦å³ï¼å½å循ç¯
InitStack(S);
while ( T!=NULL || !StackEmpty(S)){
while ( T != NULL ){
Visit(T->data) ;
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) ){
Pop(S,T);
T = T->rchild;
}
}
}
ãç®æ³2ã
void PreOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ // åºäºæ¹æ³äºï¼æµç¨å¾å¦å³ï¼å½å循ç¯
InitStack(S);
while ( T!=NULL || !StackEmpty(S) ){
while ( T != NULL ){
Visit(T->data);
Push(S, T->rchild);
T = T->lchild;
}
if ( !StackEmpty(S) ){
Pop(S,T);
}
}
}
è¿ä¸æ¥èèï¼å¯¹äºå¤çæµç¨ä¸ç循ç¯ä½çç´å°åãå½å+ç´å°åçå®ç°ã
ä¸åºééå½ç®æ³
ãæè·¯ã
Tæ¯è¦éåæ çæ ¹æéï¼ä¸åºéåè¦æ±å¨éåå®å·¦åæ åï¼è®¿é®æ ¹ï¼åéåå³åæ ã
é®é¢ï¼å¦ä½ç¨æ æ¥ä¿åä¿¡æ¯ï¼ä½¿å¾å¨ä¸åºéåè¿å·¦åæ åï¼è½å©ç¨æ 顶信æ¯è·åTæéï¼
æ¹æ³ï¼å
å°Tå
¥æ ï¼éåå·¦åæ ï¼éåå®å·¦åæ è¿åæ¶ï¼æ 顶å
ç´ åºä¸ºTï¼åºæ ï¼è®¿é®T->dataï¼åä¸åºéåTçå³åæ ã
ãç®æ³ã
void InOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ // æµç¨å¾å¦å³ï¼å½å循ç¯
InitStack(S);
while ( T!=NULL || !StackEmpty(S) ){
while ( T != NULL ){
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) ){
Pop(S, T);
Visit(T->data);
T = T->rchild;
}
}
}
è¿ä¸æ¥èèï¼å¯¹äºå¤çæµç¨ä¸ç循ç¯ä½çç´å°åãå½å+ç´å°åçå®ç°ã
ååºééå½ç®æ³
ãæè·¯ã
Tæ¯è¦éåæ çæ ¹æéï¼ååºéåè¦æ±å¨éåå®å·¦å³åæ åï¼å访é®æ ¹ãéè¦å¤ææ ¹ç»ç¹çå·¦å³åæ æ¯å¦åéåè¿ã
å¯éç¨æ è®°æ³ï¼ç»ç¹å
¥æ æ¶ï¼é
ä¸ä¸ªæ å¿tagä¸åå
¥æ (0ï¼éåå·¦åæ åçç°åºä¿æ¤ï¼1ï¼éåå³åæ åçç°åºä¿æ¤)ã
é¦å
å°Tåtag(为0)å
¥æ ï¼éåå·¦åæ ï¼è¿ååï¼ä¿®æ¹æ 顶tag为1ï¼éåå³åæ ï¼æå访é®æ ¹ç»ç¹ã
typedef struct stackElement{
Bitree data;
char tag;
}stackElemType;
ãç®æ³ã
void PostOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ // æµç¨å¾å¦å³ï¼å½å循ç¯
InitStack(S);
while ( T!=NULL || !StackEmpty(S) ){
while ( T != NULL ){
Push(S,T,0);
T = T->lchild;
}
while ( !StackEmpty(S) && GetTopTag(S)==1){
Pop(S, T);
Visit(T->data);
}
if ( !StackEmpty(S) ){
SetTopTag(S, 1); // 设置æ 顶æ è®°
T = GetTopPointer(S); // åæ 顶ä¿åçæé
T = T->rchild;
}else break;
}
}
温馨提示:答案为网友推荐,仅供参考