線索化二叉樹(代碼 、分析 、匯編)

目錄:

    • 代碼:
    • 分析:
    • 匯編:

代碼:

BTree.h
BTree.c
二叉樹(多路平衡搜索樹)

SeqList.h
SeqList.c
順序表

main.c

#include <stdio.h>
#include <stdlib.h>
#include "BTree.h"
#include "SeqList.h"struct Node//樹節點
{BTreeNode header;char v;
};void printf_data(BTreeNode* node)
{if( node != NULL ){printf("%c", ((struct Node*)node)->v);}
}
//定義將樹的所有節點設置成可以向左一直訪問節點
//只是從左開始向右,依次將未尾節點的在子節點指向另一個節點,實現可以向左一直訪問
//并不是將整個樹結構改變
void thread_via_left(BTreeNode* root, BTreeNode** pp)
{//節點不為空與節點指針不為空//注意:這里其實第一次后只會判斷第一個條件,因為pp一直有指向節點指針變量,只是指向的//節點指針變量指向的節點會為空。這是在里面判斷if( (root != NULL) && (pp != NULL) ){if( *pp != NULL )//當前這個節點指針不為空{(*pp)->left = root;//將這個指針指向的節點指針的節點的左子節點設為當前傳來的節點*pp = NULL;//當前這個指針指向的節點指針的節點的左子節點已經有指向,將這個指針設空,不再指向這個節點}if( root->left == NULL )//如果傳來的節點的左子節點為空{*pp = root;//將指向節點指針指向的節點等于傳來的節點,表示下次傳來的節點將作為這個節點的左子節點}thread_via_left(root->left, pp);thread_via_left(root->right, pp);}
}void thread_via_list(BTreeNode* root, SeqList* list)//將樹子節點全部插入順序表
{if( (root != NULL) && (list != NULL) ){SeqList_Insert(list, (SeqListNode*)root, SeqList_Length(list));thread_via_list(root->left, list);thread_via_list(root->right, list);}
}int main(int argc, char *argv[])
{BTree* tree = BTree_Create();//創建一個樹BTreeNode* current = NULL;BTreeNode* p = NULL;SeqList* list = NULL;//順序表指針int i = 0;struct Node n1 = {{NULL, NULL}, 'A'};struct Node n2 = {{NULL, NULL}, 'B'};struct Node n3 = {{NULL, NULL}, 'C'};struct Node n4 = {{NULL, NULL}, 'D'};struct Node n5 = {{NULL, NULL}, 'E'};struct Node n6 = {{NULL, NULL}, 'F'};BTree_Insert(tree, (BTreeNode*)&n1, 0, 0, 0);BTree_Insert(tree, (BTreeNode*)&n2, 0x00, 1, 0);BTree_Insert(tree, (BTreeNode*)&n3, 0x01, 1, 0);BTree_Insert(tree, (BTreeNode*)&n4, 0x00, 2, 0);BTree_Insert(tree, (BTreeNode*)&n5, 0x02, 2, 0);BTree_Insert(tree, (BTreeNode*)&n6, 0x02, 3, 0);printf("Full Tree: \n");BTree_Display(tree, printf_data, 4, '-');printf("Thread via List:\n");list = SeqList_Create(BTree_Count(tree));//創建順序表容量是樹的節點數量thread_via_list(BTree_Root(tree), list);//調用函數將樹節點插入到表中for(i=0; i<SeqList_Length(list); i++){printf("%c, ", ((struct Node*)SeqList_Get(list, i))->v);//輸出:ABDEFC}printf("\n");printf("Thread via Left:\n");current = BTree_Root(tree);//取得根節點thread_via_left(current, &p);while( current != NULL ){printf("%c, ", ((struct Node*)current)->v);current = current->left;//輸出:ABDEFC}printf("\n");BTree_Destroy(tree);getchar();return 0;
}

分析:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

匯編:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379164.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python---尋找給定序列中相差最小的兩個數字

編寫函數&#xff0c;尋找給定序列中相差最小的兩個數字 def getTwoClosestElements(arr):#先進行排序&#xff0c;使得相鄰元素最接近#相差最小的元素必然相鄰seq sorted(arr)#先進行排序dif float(inf)#無窮大#遍歷所有元素&#xff0c;兩兩比較&#xff0c;比較相鄰元素的…

ubuntu 無線 共享 上網

配置DHCP服務器 使連接到此AP的電腦 自動獲取IP 1. 安裝軟件包&#xff1a;sudo apt-get install dhcp3-server2. 修改/etc/default/dhcp3-server配置文件INTERFACES"eth1" //eth1為無線網卡的名字3. 修改/etc/dhcp3/dhcpd.conf配置文件option domain-name-servers …

Java StringBuilder getChars()方法與示例

StringBuilder類的getChars()方法 (StringBuilder Class getChars() method) getChars() method is available in java.lang package. getChars()方法在java.lang包中可用。 getChars() method is used to copy all the characters from the given arguments (int src_st, int …

Python---利用蒙特.卡羅方法計算圓周率近似值

利用蒙特.卡羅方法計算圓周率近似值 什么是蒙特.卡羅方法&#xff1f; 答&#xff1a;蒙特卡羅方法是一種計算方法。原理是通過大量隨機樣本&#xff0c;去了解一個系統&#xff0c;進而得到所要計算的值。 正方形內部有一個相切的圓&#xff0c;它們的面積之比是π/4。 這里假…

不具有繼承關系的Delegate如何進行類型轉換?

- 引自:Artech 我們知道對于兩個不具有繼承關系的兩個類型&#xff0c;如果沒有為它們定義轉換器&#xff0c;兩這之間的類型轉換是不允許的&#xff0c;Delegate也是如此。但是有時候我們卻希望“兼容”的兩種Delegate類型能夠進行轉換&#xff0c;比較典型的就是表示事件的De…

Java屬性loadFromXML()方法與示例

屬性類loadFromXML()方法 (Properties Class loadFromXML() method) loadFromXML() method is available in java.util package. loadFromXML()方法在java.util包中可用。 loadFromXML() method is used to load all the properties denoted by the XML file on the given inpu…

FLV封裝格式的分析

FLV封裝格式的分析&#xff0c;各種詳細的參數比較多沒有詳細解釋&#xff0c;這是總體的格式分布。詳細的參數說明可以參照文檔。 以flv格式內封裝的音頻流是aac、視頻流是h264分析&#xff1a; flv文件tag部分截圖&#xff1a;可以看到音頻TAG、視頻TAG是交錯存儲的

《計算機基礎復習》===數據庫技術基礎

數據庫系統三級結構&#xff1a; 數據庫系統一般劃分為三個抽象級&#xff1a;用戶級、概念級、物理級。 1&#xff09;用戶級數據庫&#xff1a;對應于外模式。它是用戶看到和使用的數據庫&#xff0c;又稱用戶視圖&#xff1b;用戶級數據庫主要由外部記錄組成&#xff0c;不同…

bs架構 erp 進銷存_從依賴經驗到用柔性ERP,企業少走了多少彎路?

企業在面對緊急訂單時&#xff0c;傳統企業將面臨兩難問題&#xff1a;如不接受緊急訂單,可能會導致潛在的顧客丟失,損失市場占有率;接受緊急訂單,可能會給企業帶來很多管理上的問題,如材料采購、庫存管理等。而企業通過信息化手段提升生產計劃與控制的柔性&#xff0c;則可從容…

Python---統計《三國演義》中出現次數較高的人物

統計《三國演義》中出現次數較高的人物。 import jieba excludes{"先主","將軍","卻說","荊州","二人","不可","不能","如此","忽然","下馬","喊聲","馬…

Java RandomAccessFile close()方法與示例

RandomAccessFile類close()方法 (RandomAccessFile Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close this RandomAccessFile stream and free all other system resources linked wit…

云端: 小軟件大平臺,綠色又安全 V0.9 Beta3(090722)

云端 是一個小軟件&#xff0c;但又是一個大平臺。安裝云端之后&#xff0c;再使用其他軟件不再需要安裝——一點、下載、直接使用&#xff1b;并且&#xff0c;通過虛擬化的運行環境&#xff0c;能夠保持系統長久的干凈、綠色&#xff0c;并保持軟件與系統的安全隔離——此方面…

MGraph圖(代碼、分析、匯編)

目錄:代碼&#xff1a;分析&#xff1a;匯編&#xff1a;MGrapth圖表示有鄰接矩陣的方式構成的圖結構。鄰接矩陣用兩個數組保存數據&#xff0c;一個一維數組存儲圖中的頂點信息&#xff0c;一個二維數組存儲圖中邊或弧的信息。無向圖中的二維數組是個對稱矩陣 1.0表示無邊&…

java: 程序包lombok不存在_Java開發神器:Lombok 學習指南

點擊上方“Java知音”&#xff0c;選擇“置頂公眾號”技術文章第一時間送達&#xff01;作者&#xff1a;semlinkerwww.segmentfault.com/a/1190000020864572一、Lombok 簡介Lombok 是一款 Java 開發插件&#xff0c;使得 Java 開發者可以通過其定義的一些注解來消除業務工程中…

Python---編程檢查并判斷密碼字符串的安全強度

編程檢查并判斷密碼字符串的安全強度 passwordinput("請輸入你的密碼&#xff1a;") plist(password) x0 for i in p:if i " ":x1 if x1:print("密碼格式不對")#密碼中不能包含空格 elif password.isdigit()True or password.isalpha()True:#全…

CFUpdate上傳控件的使用

一同事找的這個控件&#xff0c;覺得挺不錯的&#xff0c;到官方(http://www.access2008.cn/)下載源碼后稍加修改 html頁面代碼&#xff1a; <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh_cn" lang"zh_cn"> <head> <m…

observable_Java Observable addObserver()方法與示例

observable可觀察的類addObserver()方法 (Observable Class addObserver() method) addObserver() method is available in java.util package. addObserver()方法在java.util包中可用。 addObserver() method is used to insert the given observer (obs) to the bundles of o…

AAC ADTS格式分析

AAC ADTS格式分析&#xff1a; 沒有詳細的參數說明&#xff0c;只有格式分析。可以查詢文檔查看詳細參數說明。 ADTS的全稱是Audio Data Transport Stream。是AAC音頻的傳輸流格 式。AAC音頻格式在MPEG-2&#xff08;ISO-13318-7 2003&#xff09;中有定義。AAC后來 又被采用到…

新知道的幾個東西

nginx&#xff08;發音同engine x&#xff09;是一款由俄羅斯程序設計師Igor Sysoev所開發輕量級的網頁服務器、反向代理服務器以及電子郵件&#xff08;IMAP/POP3&#xff09;代理服務器。起初是供俄國大型的入口網站及搜尋引擎Rambler&#xff08;俄文&#xff1a;Рамбл…

臺達plc控制伺服電機編程實例_PLC控制伺服電機:控制脈沖的相關計算

伺服電機PLC通過脈沖的方式控制伺服電機時&#xff0c;其輸出脈沖與伺服電機的配置應具有一定的對應關系。如&#xff0c;PLC輸出多少個脈沖電機旋轉一圈&#xff1f;電機旋轉一圈移動的距離(或角度)是多少&#xff1f;這里我們以某伺服電機為例進行舉例說明&#xff1a;完成對…