二叉樹的(使用鍊錶)建立及(遞迴和非遞迴)遍歷

2021-10-10 10:10:04 字數 1247 閱讀 6099

建立二叉樹函式,以根節點作為返回值;

建立一棵二叉樹結點,並初始化;

為此二叉樹結點申請儲存空間;

向資料域輸入元素資料;

考慮終止條件:當輸入特殊字元』0』時,停止建立,即二叉樹元素輸入完畢;

迴圈體中:訪問左子樹(呼叫函式自身);訪問右子樹(呼叫函式自身);

迴圈體外,返回根節點。

前序遞迴遍歷:

若被遍歷的二叉樹非空,則:

訪問根結點;

以前序遍歷原則遍歷根結點的左子樹;

以前序遍歷原則遍歷根結點的右子樹。

前序非遞迴遍歷:

宣告乙個結點,作為當前結點;

宣告乙個棧,用來儲存返回的結點位置;

若樹不為空,則首先訪問樹的根結點並輸出列印;

判斷當前結點是否有左右孩子(開始迴圈);

如果有右孩子,則將有孩子的位址壓入棧中記憶;

如果有左孩子,則向左移動,並輸出列印;

如果沒有左孩子,則彈出棧頂元素(記憶處)作為當前結點,並輸出列印;

迴圈終止條件:儲存棧為空。

層次非遞迴遍歷(用棧實現佇列的功能):

宣告乙個結點,作為當前結點;

宣告乙個棧,用來儲存返回的結點位置;

若樹不為空則開始迴圈;

將當前結點的資料輸出;

若當前結點有右孩子,則將右孩子壓入堆疊;

若有左孩子,則將左孩子壓入堆疊;

彈出棧頂元素並移動;

終止條件:儲存棧為空。

對於一棵有n個結點的完全二叉樹,其任意結點 i (1<=i<=n),如果 i = 1, 則結點 i 是二叉樹的根,無雙親; 如果 i>1,則其雙親parent(i)是結點 i/2。

如果 2i>n; 則結點 i 無左孩子(結點 i 為葉子結點 ); 否則其左孩子lchild(i)是結點 2i。

如果 2i+1>n, 則結點 i 無右孩子; 否則其右孩子rchild(i)是結點 2i+1。

先生成所有結點併入隊,再指出其父子關係。

建立結點鏈域:結構體;

建立乙個佇列:使用陣列實現,並初始化:front=1,rear=1;

宣告根結點與子節點;

宣告乙個結點:為結點分配記憶體,並初始化**隊;

隊頭結點為根節點;

所有結點入隊後匹配父子關係,迴圈條件為佇列不為空;

從佇列的第乙個結點開始,使用完全二叉樹的性質開始匹配。

非遞迴建立二叉樹

通過二叉鍊錶建立二叉樹,二叉鍊錶的節點結構如下 template class t struct binode 二叉樹類的結構如下 template class t class bitree 二叉樹建立的過程如下圖所示 可以利用棧來實現非遞迴建立,另外還需要建立一種棧節點結構,該結構包括 注意 sta...

二叉樹的非遞迴建立

問題描述 非遞迴建立如下圖所示的二叉樹 名 稱 建立二叉樹 非遞迴 作 者 brooke gao 時 間 2013 8 21 include include include define stacksize 50 define bitree size tree tree size define bi...

二叉樹的非遞迴建立

新手一枚,希望記下自己寫的 希望各位親能夠給我提出意見和建議 include include define max 999 max表示結點是否置為空 define max size 100 棧的最大容量 typedef int elemtype typedef struct treenodetree...