if (p->left!=NULL)
{
st.top++;
st.a[st.top]=p->left;
}
}
}
}
//中序遍歷,遞歸實(shí)現(xiàn)
void Inorder(BTree* bt)
{
if (NULL!=bt)
{
Inorder(bt->left);
printf("%c ",bt->data);
Inorder(bt->right);
}
}
//中序遍歷,非遞歸實(shí)現(xiàn)
/*
思想:利用棧。從根節(jié)點(diǎn)開(kāi)始,循環(huán),只要有左子節(jié)點(diǎn)則進(jìn)棧,直到左子節(jié)點(diǎn)為空。接著彈出棧頂輸出,判斷該結(jié)點(diǎn)是否有右子節(jié)點(diǎn),
若有則進(jìn)棧,若沒(méi)有繼續(xù)彈棧。有右子節(jié)點(diǎn)的情況,判斷該節(jié)點(diǎn)是否有左子節(jié)點(diǎn),有則進(jìn)棧,直到左子節(jié)點(diǎn)為空;若該右子節(jié)點(diǎn)沒(méi)有
左子節(jié)點(diǎn),則彈棧;判斷彈出的節(jié)點(diǎn),是否有右子節(jié)點(diǎn),若有則進(jìn)棧,沒(méi)有繼續(xù)彈棧;接著又要判斷剛進(jìn)棧的這個(gè)節(jié)點(diǎn),是否有左子節(jié)點(diǎn),有則進(jìn)棧,沒(méi)有則繼續(xù)彈棧。重復(fù)下去....
棧空,是判定條件。*/
void Inorder2(BTree* bt)
{
BTree* p,*q;
Stack st;
st.top=-1;
if (NULL==bt)
{
return;
}
else
{
while (bt!=NULL)
{
st.top++;
st.a[st.top]=bt;
bt=bt->left;
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |