線索二叉樹

2021-07-23 04:56:48 字數 1427 閱讀 8514

二叉樹作為儲存結構只能儲存其左右孩子結點資訊,不能獲取結點的前驅和後繼資訊。同時二叉樹結構存在很多個空指標域。乙個n個結點的二叉樹會形成n+1個空指標域。可以利用這些空指標完成結點前驅和後繼資訊的補充。具體方法如下:將結點中lchild為空的指標指向其前驅結點;將結點中rchild為空的指標指向其後繼結點。指向前驅和後繼的指標稱為線索。加上線索的二叉樹結構稱為線索二叉樹。

程式說明:使用qt完成,輸入輸出使用的qt類

前序順序構建二叉樹。用中序遍歷新增線索

可以完成二叉樹的正向遍歷和反向遍歷

新增頭節點使得整個二叉樹形成乙個環狀

標頭檔案:

typedef enum tagtype;

struct bithrnode

;class bithrtree

;

cpp:

#include "bithrtree.h"

#include #include bithrtree::bithrtree()

bithrtree::~bithrtree()

//構造二叉樹

bithrnode *bithrtree::createbitree()

return node;

}void bithrtree::deletebithrtree(bithrnode *node)

bithrnode *bithrtree::getroot()

//中序遍歷線索化二叉樹

void bithrtree::inthreading(bithrnode *currentnode)

if(!pre->rchild)

pre=currentnode;

inthreading(currentnode->rchild);

}bithrnode *bithrtree::inthreading_addheader(bithrnode *root)

return header;

}//線索二叉樹中序正向遍歷(從頭向尾遍歷)

void bithrtree::thr_inorder_forward(bithrnode *header)

p=p->rchild;

}}//線索二叉樹中序反向遍歷(從尾向頭遍歷)

void bithrtree::thr_inorder_reverse(bithrnode *header)

qdebug()

while (rp->ltag==thread&&rp->lchild!=header)

rp=rp->lchild;}}

main函式:

int main(int argc, char *argv)

結果:

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...

線索二叉樹

1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...

線索二叉樹

原始碼 中序線索二叉樹 author 菜鳥 version 2014.7.23 include include include typedef char datatype using namespace std 定義線索二叉樹的結構體 typedef struct nodethreadbitreen...