在嚴蔚敏的《資料結構》一書中,所使用的代碼存在一些小問題。原版代碼就不附上了,主要問題是:
1.InThreading函數的參數,應該攜帶pre,這應該是比較嚴重的問題。如果沒有攜帶pre,則對pre的修改只是在調用的函數中的局部變數的值的修改,沒有影響到原來的pre的值。
2.在條件陳述式中,將命中機率高的語句放在前面,會提高代碼效率。但嚴的演算法中在InOrderThreading演算法中,將T為NULL時放在了前面。
3.InOrderThreading中,只有T為NULL時,執行Thrt->rchild = Thrt才有意義。而在T不為NULL時,要執行Thrt->rchild = pre,即使開始執行了Thrt->rchild = Thrt,也會被覆蓋掉,所以把Thrt->rchild = Thrt句移到了else分句中。
Status InOrderThreading(BiTree Thrt, BiTree T)<br />{<br />Thrt->LTag = Link;<br />Thrt->RTag = Thread;<br />if(T)<br />{<br />Thrt->lchild = T;<br />pre = Thrt;<br />InThreading(T, pre);<br />pre->RTag = Thread;<br />pre->rchild = Thrt;<br />Thrt->rchild = pre;<br />}<br />else<br />{<br />Thrt->lchild = T;<br />Thrt->rchild = Thrt;<br />}<br />}
void InTreading(BiTree p, BiTree pre)<br />{<br />if(p)<br />{<br />InThreading(p->lchild, pre);<br />if(!p->lchild)<br />{<br />p->LTag = Thread;<br />p->lchild = pre;<br />}<br />if(!pre->rchild)<br />{<br /> pre->RTag = Thread;<br /> p->rchild = p;<br />}<br />pre = p;<br />InThreading(p->rchild, pre);<br />}<br />}
歡迎討論、批評與指正!
ALex ZhonG