[數據結構]我在做樹一章題目時的心得體會(不斷更新中...)

1、後序非遞歸遍歷二叉樹時,訪問到指定結點時棧中的元素爲此結點的祖先。

2、k叉樹第p個結點的第k-1個孩子的層次序列爲p*k。

3、在樹這章寫遞歸時,出口判斷常爲樹空或子樹空。

4、樹轉成的二叉樹無右子樹。

5、樹用孩子兄弟存儲的結構中,結點若無firstchild,則該結點在樹的結構中必是一個葉子。故用孩子兄弟鏈表示的樹統計葉子的算法可以寫爲firstchild == NULL。

6、找子孫常用先序遍歷,找祖先常用後序遍歷。

7、在按層次訪問一棵二叉樹的基礎上加以修改,不論其左右子樹是否爲空均入隊,若爲完全二叉樹,則將它按層序輸出時得到的是一個連續的不含空指針的序列,反之序列中會含有空指針。

8、遞歸中常用return向上級函數返回值。

9、對於遞歸單棵樹,用NULL和非NULL做出口判斷已經足夠。對於建樹的擔心,用return向上級函數返回地址,並在非NULL狀態下建好鏈就行了。而對於多棵樹,則要對不同樹的不同狀態進行出口判斷。

10、先序線索樹結點的前驅:當結點無左子樹時,是lchild指向的結點,否則要設一個pre指針指向節點的根,則pre指針指向的結點爲當前結點的前驅。結點的後繼:結點有左子樹,則後繼爲其左子樹,否則爲其rchild指向的結點。

11、中序線索樹結點的前驅:結點無左子樹時,其lchild指向的結點即爲它的前驅,否則爲其左子樹的最右下結點;後繼:結點無右子樹時其後繼爲其rchild指向的結點,否則其後繼是它右子樹最左結點。

12、後序線索樹節點的前驅:若結點無左子樹,則其lchild指向的結點是其前驅,否則若結點有右子樹,其右孩子爲其前驅,否則其左孩子爲其前驅;後繼:結點右子樹爲空時,其rchild指向的結點爲其後繼,否則需通過找結點的雙親,若該結點爲雙親的左孩子且雙親有右子樹,則結點的後繼爲其雙親右子樹的最左結點,若其雙親無右子樹,則結點後即爲其雙親。若結點是其雙親的右孩子,其後繼是其雙親。而線索二叉樹結點中一般不含指向雙親的指針,由此可見,線索對後序線索樹的後繼無太多幫助。

13、對於給定序列建樹,應用給定序列找出其根的位置,再找左右子樹的上下界作爲新樹的全樹上下界,不斷縮小樹,直至樹空。

14、對於給定靜態數組建鏈結構樹,先建好根,然後用2*i和2*i+1的規律建其左右子樹。

15、

不斷更新中...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章