一顆線索二叉樹:
根據下圖進行節點的建立:
**如下:
因為普通二叉樹有空指標域,所以我們可以利用這些空指標來線索化
1、二叉樹的線索化,實質上就是遍歷一棵二叉樹,在遍歷過程中,訪問節點的操作是檢查當前結點的左右指標域是否為空,如果為空,即將他們改為前驅節點或後繼節點的線索。為記錄前驅節點,定義pre為全域性變數,始終指向當前結點的前驅節點。
定義乙個全域性變數指向線索二叉樹的前驅節點:
bithrnode *pre;
中序遍歷進行線索化:
void
inthreading
(bithrtree p)if(
!pre-
>rchild)
pre = p;
inthreading
(p->rchild);}
}
根據下圖建立頭結點,線索化:
**如下:
bool
inorderthr
(bithrnode *head,bithrtree t)
else
return
true
;}
對於中序線索二叉樹上的任意節點,尋找其中序的前驅節點,有以下兩種情況:
1、如果該節點的左標誌域為1,那麼其左指標所指向的節點便是它的前驅節點。
2、如果該節點的左標誌為0,表明該節點有左孩子,根據中序遍歷的定義,它的前驅節點是以該節點的左孩子為根節點的子樹的最右節點,即沿著其左子樹的右指標鏈向下查詢,當某節點的右標誌域為1時,它就是所要找的前驅節點。
在中序線索二叉樹上查詢任意節點的中序前驅節點:
bithrnode *
inprenode
(bithrnode *p)
}return pre;
}
對於中序線索二叉樹上的任意節點,尋找其中序的後繼節點,有以下兩種情況:
1、如果該節點的右標誌域為1,那麼其右指標所指向的節點便是它的後繼節點。
2、如果該節點的右標誌為0,表明該節點有右孩子,根據中序遍歷的定義,它的後繼節點是以該節點的右孩子為根節點的子樹的最左節點,即沿著其右子樹的左指標鏈向下查詢,當某節點的左標誌域為1時,它就是所要找的後繼節點。
在中序線索二叉樹上查詢任意節點的中序後繼節點:
bithrnode *
inpostnode
(bithrnode *p)
}return post;
}
從最後乙個節點根據前驅節點進行線索二叉樹的遍歷:
void
inorderpre
(bithrnode *head)
}
從第乙個節點根據後繼節點進行線索二叉樹的遍歷:
void
inorderpost
(bithrnode *head)
while
(p !=
null
&& p != head)
}
完整**如下:
#include
using
namespace std;
typedef
char elemtype;
typedef
struct bithrnode bithrnode,
*bithrtree;
bithrnode *pre;
//定義乙個全域性變數指向線索二叉樹的前驅節點
void
inthreading
(bithrtree &p)if(
!pre-
>rchild)
pre = p;
inthreading
(p->rchild);}
}bool
inorderthr
(bithrtree &head, bithrtree t)
else
return
true;}
bithrnode *
inprenode
(bithrnode *p)
}return pre;
}bithrnode *
inpostnode
(bithrnode *p)
}return post;
}void
inorderpre
(bithrnode *head)
}void
inorderpost
(bithrnode *head)
while
(p !=
null
&& p != head)
}void
createbitree
(bithrtree &t)
}int
main()
測試效果圖:
二叉樹的鏈式儲存結構(線索二叉樹)
一 鏈式儲存結構 由於順序儲存二叉樹的空間利用率較低,因此二叉樹一般都採用鏈式儲存結構,用鍊錶結點來儲存二叉樹中的每個結點。在二叉樹中,結點結構通過包括若干資料域和若干指標域,二叉鍊錶至少包含3個域 資料域 data 左指標域 lchild和右指標域 rchild,如下圖所示 其中,n 個結點的二叉...
二叉樹鏈式儲存的C實現
在實現二叉樹的鏈式儲存的過程中,我遇到了一些問題,感到對遞迴的理解還不夠深入。另外,中有一處必須使用全域性變數做陣列索引,還在研究其中的原因,已完成,現在貼在部落格中供參考 include include include include define maxsize 100 define ok 1 ...
(C )二叉樹的線索化 線索二叉樹
線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...