#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...