線索二叉樹建立及刪除

2021-07-03 23:43:23 字數 1368 閱讀 8017

題目描述

線索二叉樹概念

1.定義

n個結點的二叉鍊錶中含有n+1個空指標域。利用二叉鍊錶中的空指標域,存放指向結點在某種遍歷次序下的前趨和後繼結點的指標(這種附加的指標稱為」線索」)。

這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹(threaded binarytree)。根據線索性質的不同,線索二叉樹可分為前序線索二叉樹、中序線索二叉樹和後序線索二叉樹三種。

注意:

線索鍊錶解決了二叉鍊錶找左、右孩子困難的問題,出現了無法直接找到該結點在某種遍歷序列中的前趨和後繼結點的問題。

2.線索鍊錶的結點結構

線索鍊錶中的結點結構為:

其中:

ltag和rtag是增加的兩個標誌域,用來區分結點的左、右指標域是指向其左、右孩子的指標,還是指向其前趨或後繼的線索。

下面你的任務:首先根據輸入的序列建立二叉樹,然後對二叉樹進行線索化,最後中序遍歷二叉線索樹並輸出結果。

輸入要求

輸入的第一行包含單獨的乙個數字t,表示測試序列的數目;

以下每一行為乙個測試序列,測試序列是按先序序列輸入字元 ,如果節點沒有左或右孩子,則輸入用空格表示,最後用乙個空格結束一行的輸入。

輸出要求

對應每個測試序列,採用中序遍歷二叉線索樹,輸出一行

假如輸入

2

abc de g f

-+a *b -c d /e f

應當輸出

cbegdfa

a+b*c-d-e/f

寫了個線索二叉樹

code:

#include

.h>

using namespace std;

typedef struct btree

btree;

btree *creatbtree()

void inthread(btree *p,btree *&pre)

if(pre&&!pre->right)

pre=p;

inthread(p->right,pre);

}}void createinthread(btree *t)

}btree *first(btree *p)

btree *next(btree *p)

void inorder(btree *t)

void delbtree(btree *t)

int main()

return

0;}

線索二叉樹建立及遍歷

層序輸入 中序遍歷建立線索二叉樹 利用頭節點遍歷線索二叉樹 include using namespace std typedef char elemtype define maxsize 100 enum tag 二叉鍊錶的結構建立 typedef struct bitnodebitnode,bi...

線索二叉樹

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

線索二叉樹

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