線索二叉樹的線索化演算法

來源:互聯網
上載者:User

在嚴蔚敏的《資料結構》一書中,所使用的代碼存在一些小問題。原版代碼就不附上了,主要問題是:

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.