資料結構例程 從根節點到每個葉子節點的路徑之逆

2021-07-05 23:58:13 字數 1158 閱讀 4538

本文是資料結構基礎系列(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...

資料結構 節點和結點,到底怎麼區分?

你們有沒有糾結過這樣乙個問題,就是資料結構鍊錶中結點的 結 到底是哪個字?說實話,在寫這篇部落格之前,我一直以為鍊錶中的結點叫 節點 所以不管是給 寫注釋,還是理解方面,我都覺得是 節點 今天就來說一下節點和結點到底有什麼不同?節點呢,被認為是乙個實體,有處理能力,比如,網路上的一台計算機 而結點則...