線索二叉樹

2021-07-23 23:19:07 字數 1713 閱讀 4630

對於具有n個結點的二叉樹(如下圖):

在2n個指標域中:

abd#g###ce##f##(#=8;*child=6)

而線索二叉樹意在利用這些空指標存放結點在某種遍歷序列下的前驅和後繼資訊。

規則為:對於任意結點,若其左指標域為空,則用其存放前驅線索,若右為空則存放後繼線索。

中序線索化鏈表偽**:

建立二叉鍊錶,將每個結點的左右標誌設為0;

遍歷二叉鍊錶,建立線索

#pragma once

enum flag

;template

type>

struct thrbinode

;template

type>

class

threadbitree//線索二叉樹

;//中序遍歷

private:

thrbinode

*root;

thrbinode

*creat

(thrbinode

*bt);

void thrbitree

(thrbinode

*bt);

thrbinode

*pre;//前驅

void inorder

(thrbinode

*p);

};template

type>

threadbitree

::threadbitree

()

template

type>

threadbitree

::~threadbitree

()

template

type>

inline thrbinode

* threadbitree

::next

(thrbinode

* p)

}return q;

}template

type>

inline void threadbitree

::inorder

(thrbinode

*p)cout << p->data << " ";

while (p->rchild!=null)

}template

type>

inline thrbinode

* threadbitree

::creat

(thrbinode

* bt)

return bt;

}template

type>//二叉樹中序線索化

inline void threadbitree

::thrbitree

(thrbinode

* bt)

if (bt->rchild == null)bt->rtag = thread;

if (pre!=null&&pre->rtag == thread)pre->rchild = bt;/*初始化後繼線索*/

pre = bt;//記錄pre

thrbitree

(bt->rchild);

}

線索二叉樹

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