怎么定義一個(gè)指針 花一晚上也無(wú)法理解二叉樹(shù)的非遞歸遍歷,我該繼續(xù)學(xué)下去嗎?
花一晚上也無(wú)法理解二叉樹(shù)的非遞歸遍歷,我該繼續(xù)學(xué)下去嗎?通常,花更多的時(shí)間是必要的。首先需要了解堆棧的操作和意義,還需要了解遍歷二叉樹(shù)的思想。有人用節(jié)點(diǎn)著色來(lái)編寫非遞歸算法,即黑、灰、白三種顏色代表節(jié)
花一晚上也無(wú)法理解二叉樹(shù)的非遞歸遍歷,我該繼續(xù)學(xué)下去嗎?
通常,花更多的時(shí)間是必要的。首先需要了解堆棧的操作和意義,還需要了解遍歷二叉樹(shù)的思想。有人用節(jié)點(diǎn)著色來(lái)編寫非遞歸算法,即黑、灰、白三種顏色代表節(jié)點(diǎn)的狀態(tài),未被訪問(wèn)的節(jié)點(diǎn)為白色,未被訪問(wèn)的節(jié)點(diǎn)為灰色,被訪問(wèn)的節(jié)點(diǎn)為黑色。對(duì)于中間順序遍歷,除非訪問(wèn)了左子樹(shù),否則需要訪問(wèn)當(dāng)前節(jié)點(diǎn),所以依次沿左子樹(shù)搜索,找到葉子后訪問(wèn),然后退出右堆棧上的元素,并在右子樹(shù)上執(zhí)行相應(yīng)的操作,直到堆棧為空。
用C語(yǔ)言編程實(shí)現(xiàn)二叉樹(shù)的中序遍歷算法?
#Include
#Include
struct bitnode*stack[100
]struct bitnode//define struct
{
char data
struct bitnode*lchild,*rchild
}
void later(struct bitnode*&)//preorder create tree
{
char Ch
scanf scanf(%C“,& CH)
if(CH=”)
P=null
else
{
P=(struct bitnode*)malloc(sizeof(struct bitnode*)bitnode)
P->data=CH
later(P->lchild)
later(P->rchild)
}
void print(struct bitnode*P)//預(yù)序遍歷(輸出二叉樹(shù))
{
int i=-1(1)
]{
而(P!=null)
]{
堆棧[i]=P->rchild/*printf(”確定?N“)*/
printf(”%C“,P->data)
P=P->lchild
}]如果(I!=-1)
{
P=stack[i
]i-->]else
return
}
void main()//主函數(shù)
{
struct bitnode*P,*t
稍后(P)
print(P)]}