原创 輸出二叉樹前序序列中的第K個結點內容&測試

假設已經建立好二叉樹,知道二叉樹的前序序列,要輸出前序序列中第k(1<=k<=n)個結點中的數據應該怎麼操作?此次測試用的是三層滿二叉樹,層次遍歷序列爲ABCDEFG總體思路就是遞歸的去前序遍歷二叉樹,設置一個全局變量i,每過一個結點就+

原创 數據結構學習——計算二叉樹的層數&用同一思路計算每層結點個數

1.計算層數主體思路是用隊列構建層次遍歷。設計一個last用來標記front正在移動的當前層的最後一個結點,level來標記層數(計數器)因爲rear肯定先於front進入下一層進行結點添加,front能夠來到這層時,就說明rear早已把

原创 輸出二叉樹前序序列中的第K個結點內容&amp;測試

假設已經建立好二叉樹,知道二叉樹的前序序列,要輸出前序序列中第k(1<=k<=n)個結點中的數據應該怎麼操作?此次測試用的是三層滿二叉樹,層次遍歷序列爲ABCDEFG總體思路就是遞歸的去前序遍歷二叉樹,設置一個全局變量i,每過一個結點就+

原创 數據結構——交換二叉樹中所有結點的左右子樹(所有結點換位置)

採用遞歸的思想,先思考對單個結點要進行的操作:現有本層結點T,函數的目的在於將T->lchild連到原本的右子上,把T->rchild連接到原本的左子上,因此語句結構應爲:T->lchild=fun();T->rchild=fun();進

原创 實踐操作——驗證swap()函數是否正確

在寫轉換二叉樹的swap()函數時發現和教材答案有所不同,爲驗證正確性寫了如下代碼測試測試用的是一個三層滿二叉樹,共7個結點。給出先序和中序序列以創建二叉樹。該樹層次遍歷順序爲ABCDEFGBiTree PreInCreat(char A

原创 數據結構學習——非遞歸方法遍歷二叉樹

二叉樹的非遞歸遍歷要藉助棧,棧起到的作用是保護現場?或者說記錄來的路程,因爲沒有線索指向你當前結點的前驅,噹噹前結點處理完要返回上幾層中的結點(來路)的時候就沒有辦法,因此需要用棧來記錄來的過程,需要的時候用GetTop()或者直接Pop

原创 數據結構——判斷二叉樹是否爲完全二叉樹

該方法採取層次遍歷(回憶層次遍歷的實現需要藉助一個隊列,一邊進隊一邊出隊,在出隊的同時對結點進行visit())對於完全二叉樹來說,當訪問到空結點時說明該樹已經完結,之後隊列中也將一直爲空。但非完全的二叉樹在空結點之後仍有可能出現數據。根

原创 數據結構——已知先序和中序序列,建立二叉樹的二叉鏈表

現在已經知道二叉樹的先序和中序序列,分別存儲在數組BiTree A[]和B[]中。A代表先序本方法要用到遞歸,採取一種自頂向下開闢結點空間,而自底向上使連接結點的思路①首先開闢root空間,並將當前先序序列A中第一號元素賦到root中(之

原创 數據結構——計算二叉樹中二分結點的個數

方法一:構造一個遍歷(層次/中序/先後序應該都可以的),在訪問每一個結點時用語句(b->rchild!=NULL&&b->rchild!=NULL)檢查該結點,若滿足則全局變量NUM++,最後返回NUM即二分結點數目//非遞歸方法 int

原创 數據結構學習——線索二叉樹的遍歷

在上一篇中我們已經將二叉樹線索化,一個線索化了的二叉樹,可以按照線索順序採用非遞歸的方法將二叉樹遍歷。具體思路如下:按線索順序遍歷的關鍵在於怎麼找到下一個結點順利進入,要找下一個結點就要根據當前結點屁股上的線索來找。觀察可知rchild有

原创 數據結構學習——計算二叉樹的層數&amp;用同一思路計算每層結點個數

1.計算層數主體思路是用隊列構建層次遍歷。設計一個last用來標記front正在移動的當前層的最後一個結點,level來標記層數(計數器)因爲rear肯定先於front進入下一層進行結點添加,front能夠來到這層時,就說明rear早已把

原创 數據結構學習記錄——中序情況下線索二叉樹的構建

先規定線索二叉樹結點結構如下struct ThreadNode{ element data; struct ThreadNode *lchild,*rchild; int ltag,rtag; }ThreadNod