本文是資料結構基礎系列(6):樹和二叉樹中第11課時二叉樹遍歷非遞迴演算法和第12課時層次遍歷演算法的例程。
問題:設計演算法輸出從根節點到每個葉子節點的路徑之逆。
解法1:利用二叉樹後序遍歷非遞迴演算法中,每乙個葉子節點出現時,棧中從棧頂到棧底,正好是葉子節點到根節點的逆序的性質編寫。
[參考解答](btreee.h見演算法庫)
#include
#include "btree.h"
void allpath1(btnode *b)
p=null;
flag=1;
while (top!=-1 && flag)
top--;
p=b; //p指向剛訪問過的節點
}else}}
while (top!=-1);
printf("\n");
}}int main()
解法2:利用二叉樹層次遍歷演算法的思路解決。
[參考解答](btreee.h見演算法庫)
#include
#include "btree.h"
void allpath2(btnode *b)
qu[maxsize]; //定義非環形佇列
btnode *q;
int front,rear,p; //定義隊頭和隊尾指標
front=rear=-1; //置隊列為空佇列
rear++;
qu[rear].node=b; //根節點指標進入佇列
qu[rear].parent=-1; //根節點沒有雙親節點
while (front!=rear) //佇列不為空
printf("%c\n",qu[p].node->data);
}if (q->lchild!=null) //*q節點有左孩子時將其進列
if (q->rchild!=null) //*q節點有右孩子時將其進列
}}int main()
注:在main函式中,建立的用於測試的二叉樹如下——
資料結構 從葉子結點到根節點的全部路徑
問題 給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。說明 葉子節點是指沒有子節點的節點。示例 與此問題類似的問題 資料結構 二叉樹的最長路徑問題 思路 遇到的是葉子結點,將當前結點輸出 也就不需要進入陣列了 並將陣列的元素逆序輸出。遇到的不是葉子結點,將該元素進入陣列。遞迴實現左右子樹。核心 v...
資料結構作業之輸出樹的每一條從根節點到葉節點的路徑
資料結構作業,輸出樹的每一條從根節點到葉節點的路徑 include include typedef struct tree tree,tree typedef struct squeue squeue intinitsqueue squeue s intenqueue squeue s,tree e...
資料結構 節點和結點,到底怎麼區分?
你們有沒有糾結過這樣乙個問題,就是資料結構鍊錶中結點的 結 到底是哪個字?說實話,在寫這篇部落格之前,我一直以為鍊錶中的結點叫 節點 所以不管是給 寫注釋,還是理解方面,我都覺得是 節點 今天就來說一下節點和結點到底有什麼不同?節點呢,被認為是乙個實體,有處理能力,比如,網路上的一台計算機 而結點則...