#include
#include
typedef char telemtype;
// 二叉樹的二叉線索儲存表示
typedef enumpointertag; // link(0):指標,thread(1):線索
typedef struct bithrnode
bithrnode,*bithrtree;
telemtype nil = ' '; // 字元型以空格符為空
bithrtree pre; // 全域性變數,始終指向剛剛訪問過的結點
// 按先序輸入二叉線索樹中結點的值,構造二叉線索樹t
// 空格(字元型)表示空結點
int createbithrtree(bithrtree *t)
return 1;
}// 演算法6.7 p135
// 中序遍歷進行中序線索化。
void inthreading(bithrtree p)
if(!pre->rchild) // 前驅沒有右孩子
pre=p; // 保持pre指向p的前驅
inthreading(p->rchild); // 遞迴右子樹線索化 }}
// 演算法6.6 p134
// 中序遍歷二叉樹t,並將其中序線索化,thrt指向頭結程式設計客棧點。
int inorderthreading(bithrtree *thrt,bithrtree t)
return 1;
}// 演算法6.5 p134
// 中序遍歷二叉線索樹t(頭結點)的非遞迴演算法。
int inordertr**erse_thr(bithrtree t,int(*visit)(telemtype))
p=p->rchild;
} return 1;
}int vi(telemtype c)
int main()
執行結果:
本文標題: c語言實現線索二叉樹的定義與遍歷示例
本文位址:
用C語言實現線索二叉樹
為什麼會有線索二叉樹?當以二叉鍊錶形式來儲存二叉樹時,只能找到節點的左右子樹資訊,而不能直接得到節點的前驅和後繼資訊 只有通過遍歷,在動態過程中才能查到前驅和後繼的資訊 因此就有了線索二叉樹,由二叉樹的性質可知,一棵具有 n 個節點的二叉樹,對應的二叉鍊錶中共有 2n 個指標域,其中 n 1 個用於...
c語言實現線索二叉樹的建立,線索化以及遍歷
結構與函式 typedef struct threadnodethreadnode,threadtree threadtree initthreadtree void inthread threadtree p,threadtree pre 通過中序遍歷對二叉樹線索化 void createinth...
(C )二叉樹的線索化 線索二叉樹
線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...