線索化二叉樹 前中後序線索化及前序中序遍歷

2021-07-31 17:33:55 字數 1502 閱讀 6400

#pragma once

#includeusing namespace std;

enum pointinfo;//儲存節點線索資訊

templatestruct binarytreenodethd

};templateclass binarytreethd

binarytreethd(t* arr,size_t size,const t& invalid)//建立二叉樹

//前序線索化二叉樹

void prethread()

void inthread()

void postthread()

//前序遍歷線索二叉樹

void preorder()

cout<_data;//左子樹最後乙個節點

while(pcur->_rightthread == thread)//若右子樹不存在,連續訪問後繼

if(pcur->_leftthread == link)//

pcur = pcur->_pleft;

else

pcur = pcur->_pright;

} cout<_leftthread == link)

cout<_data;

while(pcur->_rightthread == thread)

pcur = pcur->_pright;

} }private:

void _createbinarytreethd(node*& proot, t* arr, size_t size, size_t& index, const t& invalid) }

void _prethread(node* proot,node*& prev)

if(prev && prev->_pright == null)

prev = proot;

if(proot->_leftthread == link)

_prethread(proot->_pleft,prev);

if(proot->_rightthread == link)

_prethread(proot->_pright,prev);

} }void _inthread(node* proot,node*& prev)

if(prev && prev->_pright == null)

prev = proot;

if(proot->_rightthread == link)

_inthread(proot->_pright,prev);

} }void _postthread(node* proot,node*& prev)

if(prev && prev->_pright == null)

prev = proot;

} }node* _proot;

};#include"test.h"

void funtest()

int main()

線索化二叉樹(前序線索化,中序線索化)

為什麼要對二叉樹進行線索化?對二叉樹進行遍歷是以一定的規則將二叉樹的節點排列成乙個線性序列,這些線性序列有且僅有乙個直接前驅和直接後繼,但是以二叉鍊錶進行儲存的時候,只能找到節點的左右孩子資訊,不能直接得到節點在任一串行的前驅和後繼資訊,前驅和後繼資訊只能在遍歷的動態過程中才能得到。如何獲取到前驅和...

二叉樹線索化以及線索化前序 中序 後序遍歷

二叉樹線索化以及線索化前序 中序 後序遍歷 前面已經對二叉樹的建立與建立有了一定了解,那二叉樹的線索化又是什麼呢?二叉樹雖然是非線性結構,但二叉樹的遍歷卻為二叉樹的節點匯出了乙個線性序列。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼...

詳解 前 中 後序線索化二叉樹及其遍歷

前序線索化二叉樹是在二叉樹前序遍歷的過程中對其進行線索化,將葉子節點和單分支節點的指標域線索化成其前驅和後繼,利用遞迴的特點,並且定義兩個節點指標,乙個在前乙個在後,在中序遍歷的過程中通過這兩個前後指標建立前驅後繼的連線關係。實現 前序線索化二叉樹 void prethbinarytree btth...