我們在上一章中,學習了二叉樹的數據結構。因為二叉樹的特殊性,它不同於普通的樹,所以可以使用順序存儲結構來存儲。但是,用順序存儲結構會存在浪費空間的弊端。之后,我們學習了二叉鏈表。用鏈式存儲結構存儲樹,結點結構為一個數據域data,兩個指針域lchild、rchild。樹的數據結構講完 ...
對於二叉樹的遍歷通常習慣采用遞歸的方法,當樹的規模很大的時候,遞歸的深度就會很深,這就導致了對空間的浪費。在此,我們先不討論二叉樹遍歷的本質,以及遞歸的詳細過程。我先先來研究一下,二叉樹本身: 圖 二叉樹 圖 所示為一個二叉樹的結構,我們注意結點的特征。結點包含了三個數據:存儲值,指向左子節點的左指針,以及指向右子節點的右指針。 我們考慮在計算機中的實現:對於每一個節點,我們都需要分配相同大小的 ...
2019-03-02 11:54 0 874 推薦指數:
我們在上一章中,學習了二叉樹的數據結構。因為二叉樹的特殊性,它不同於普通的樹,所以可以使用順序存儲結構來存儲。但是,用順序存儲結構會存在浪費空間的弊端。之后,我們學習了二叉鏈表。用鏈式存儲結構存儲樹,結點結構為一個數據域data,兩個指針域lchild、rchild。樹的數據結構講完 ...
線索二叉樹 (threaded binary tree) 上圖所示的二叉鏈表,存在多個空指針域。假設一個二叉鏈表的結點數為n,則共有2n個指針域。而n個結點的二叉樹共有n-1條分支。所以空指針域的個數為:2n - (n-1) = n+1。 可以在這 ...
線索二叉樹利用二叉樹空余的指針域,來實現二叉樹的鏈式化。然后,就可以通過前驅,后繼像雙向鏈表一樣根據某種遍歷次序對樹的結點進行訪問。 數據結構: 線索二叉樹的操作: 建立線索二叉樹: 不同的遍歷順序,會得到不同的線索二叉樹。 一般使第線索 ...
1.中序線索二叉樹 數據結構: 首先理解如何建立中序線索化二叉樹。如果結點的左子樹存在,lt為0 。不存在為1;右子樹同理。直接對根節點進行中序遍歷,在不存在的場合設置標志位和前驅、后繼。 把二叉樹看成中序遍歷序列,序列的第一個結點(最左下結點)的前驅為NULL,最后一個結點 ...
1.遍歷前序線索二叉樹 如果當前結點有左孩子,則應該更新p指向左孩子,否則指向右孩子,這與中序遍歷線索二叉樹不同,中序遍歷時,能夠確定當前結點的左子樹一定被訪問過了,直接更新p指向右孩子 2.前序線索化二叉樹 3.刪除線索二叉樹所占空間 ...
后序線索二叉樹中,結點的后繼: 如果結點的雙親有右孩子,則結點的后繼為雙親的右子樹中第一個被訪問的結點 如果結點的雙親沒有右孩子,則結點的后繼為雙親 如果結點為雙親的右孩子,則結點的后繼為雙親 因為找到后序遍歷中,找到結點的后繼需要知道節點的雙親,所以可以用三叉鏈表 ...
二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞歸或者用棧輔助實現非遞歸的遍歷。二叉樹作為存儲結構時,一個節點只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者后繼。為了保存這種在遍歷中需要的信息,我們利用二叉樹中指向左右子樹的空指針來存放節點的前驅或后繼信息。 也就是說 ...
遍歷二叉樹是以一定規則將二叉樹中結點排列成一個線性序列即是對一個非線性結構進行線性化操作,使除第一個和最后一個節點外,每一個節點有且只有一個直接前驅,直接后繼 二叉樹作為存儲結構只能找到節點的左孩子右孩子信息,而不能直接得到結點在任一序列中的前驅和后繼,這種信息只有在遍歷的動態過程中可以看到 ...