3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
ADT是指抽象數(shù)據(jù)的組織和與之相關(guān)的操作??梢钥醋魇菙?shù)據(jù)的邏輯結(jié)構(gòu)及其在邏輯結(jié)構(gòu)上定義的操作

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
獲取頂部標(biāo)簽的作用。可以得到一個(gè)bool返回值,一般用于樹(shù)結(jié)構(gòu)中。
T是要遍歷樹(shù)的根指針,后序遍歷要求在遍歷完左右子樹(shù)后,再訪問(wèn)根。需要判斷根結(jié)點(diǎn)的左右子樹(shù)是否均遍歷過(guò)。
可采用標(biāo)記法,結(jié)點(diǎn)入棧時(shí),配一個(gè)標(biāo)志tag一同入棧(0:遍歷左子樹(shù)前的現(xiàn)場(chǎng)保護(hù),1:遍歷右子樹(shù)前的現(xiàn)場(chǎng)保護(hù))。
首先將T和tag(為0)入棧,遍歷左子樹(shù);返回后,修改棧頂tag為1,遍歷右子樹(shù);最后訪問(wèn)根結(jié)點(diǎn)。
typedef struct stackElement{
Bitree data;
char tag;
}stackElemType;
【算法】
void PostOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ // 流程圖如右,當(dāng)型循環(huán)
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); // 設(shè)置棧頂標(biāo)記
T = GetTopPointer(S); // 取棧頂保存的指針
T = T->rchild;
}else break;
}
}
- 3 回答
- 0 關(guān)注
- 801 瀏覽
添加回答
舉報(bào)