二叉樹的線索化

2021-07-13 16:06:30 字數 2628 閱讀 4431

#includeusing namespace std;

enum pointertag

;templatestruct binarytreenodethd

t _data;

binarytreenodethd* _left;

binarytreenodethd* _right;

binarytreenodethd* _parent;

pointertag _lefttag;           //左孩子線索標誌

pointertag _righttag;          //右孩子線索標誌

};templatestruct binarytreethd

binarytreethd< t>(const t* a,size_t size)

//中序線索化

void inorderthreading()

//前序線索化

void preorderthreading()

//後序線索化

void postorderthreading()

//中序線索化的遍歷

void inorderthd()

cout<_data<< " ";    //輸出最左節點

while(cur->_righttag!=link )   //找後繼節點

cur=cur->_right;

}cout<* cur=_root;

while(cur)

cout<_data<< " ";

cur=cur->_right;

}cout<_left==null &&_root->_right==null)    //只有乙個節點的情況

cout<<_root->_data<* cur=_root->_left;

binarytreenodethd* prev=null;

while(cur)

if(cur==_root)

while(cur&&cur->_righttag==link &&cur->_right==prev)

if(cur&&cur->_righttag==link )

cur=cur->_right;

}cout<* _createtree(const t* a,size_t& index,size_t size)    //遞迴建立樹

return root;

}//中序線索化內部函式

void _inorderthreading(binarytreenodethd * cur,binarytreenodethd *& prev)

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

prev=cur ;     //prev要動起來

_inorderthreading( cur->_right,prev );

}//前序線索化的內部函式

void _preorderthreading(binarytreenodethd * cur,binarytreenodethd *& prev)

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

prev=cur ;      //prev要動起來

if(cur ->_lefttag==link)

_preorderthreading( cur->_left,prev );

if(cur ->_righttag==link)

_preorderthreading( cur->_right,prev );

}//後序線索化的內部函式

void _postorderthreading(binarytreenodethd * cur,binarytreenodethd *& prev)

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

prev=cur ;    //prev要動起來

}protected:

binarytreenodethd* _root;

};void test()

;                 //int array1[1]=;

binarytreethdbtt1(array1,10);

btt1.inorderthreading();

btt1.inorderthd();       //3 2 4 1 6 5

/*btt1.preorderthreading();

btt1.preorderthd();    */     //1 2 3 4 5 6

/*btt1.postorderthreading(); 

btt1.postorderthd();  */       //3 4 2 6 5 1

int array2[15]=;

binarytreethdbtt2(array2,15);

btt2.inorderthreading();

btt2.inorderthd();      //2 3 1 5 6 7 4 8

//1 2 3 4 5 6 7 8

/*btt2.postorderthreading();

btt2.postorderthd();  */      //3 2 7 6 5 8 4 1

}int main()

(C )二叉樹的線索化 線索二叉樹

線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...

線索化二叉樹以及遍歷線索化二叉樹

1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...

線索化二叉樹

define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...