資料結構(四)之非遞迴遍歷二叉樹

2021-09-06 14:28:41 字數 690 閱讀 5259

void inoder(bitree root)//二叉樹的中序遍歷非遞迴 

else//如果當前結點左節點為空出棧訪問該節點右子樹 或當前右節點為空出棧,此時為棧中保留的是該節點的前驅節點,繼續訪問右節點

} }

void postorder(bitree root)

else

else p=p->right;

}}

} //表面上看遞迴演算法好像沒有呼叫棧,實際上遞迴演算法的執行需要反覆多次地呼叫自己,沒呼叫一次,系統內部都有系統執行棧區

//在支援。需要保留本層引數,臨時變數與返回位址等,隨著函式遞迴呼叫,執行棧繼續增長,直到函式執行完才能徹底釋放占用的空間。

二叉樹中序非遞迴遍歷思路

p=root;

①如果棧不為空或者p不為空一直往左走 p=p->left

②如果p為空 出棧得到p節點,訪問p,p=p->right。重複以上步驟

二叉樹後序非遞迴思路

p=root;

①設計乙個節點q用來儲存訪問的上乙個節點

②如果棧不為空或者p不為空一直往左走p=p->left;

③如果p為空 取棧頂的值,如果棧頂值的右孩子等於null,或q,表明此節點的左右孩子都已訪問,把p賦值為null繼續退棧。如果棧頂的右孩子不等於null,或q,繼續訪問該節點的右孩子。重複以上步驟

資料結構 二叉樹的遞迴 非遞迴遍歷

複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...

資料結構 二叉樹遍歷非遞迴實現

資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。以下為三種遍歷方法的非遞迴c實現 include include typedef struct binode binode,bitree typedef...

資料結構 二叉樹遍歷 非遞迴演算法

二叉樹的遍歷非遞迴演算法。include include define maxsize 100 typedef char elemtype using namespace std typedef struct node btnode void createbtnode btnode b,char s...