中序二叉树线索化 帮我看看吧
中序线索树类中有完成二叉树的中序线索化的函数InThreaded(Node *curr ,Node*&pre)
其中参数curr和pre分别指向当前被访问结点和它的前驱结点
函数如下:
template <typename Node,typename T>
void InThreaded<Node,T>::InThreaded(Node *curr ,Node*&pre)
{
if(curr!=NULL)
{
InThreaded(curr->Left(),pre); //这句 ,结点往左走,pre还不变吗?还能这样写吗?
if(pre==NULL) curr->Lth()=1; //置线索 是curr->Left()为空才置1吧?跟pre==null有什么关系?
else
{
if(pre->Right()==NULL)
{
pre->Right()=curr;
pre->Rth()=1;//置线索
}
if(curr->Left()==NULL)
{
curr->Left()=pre;
curr->Lth()=1;
}
}
pre=curr;
InThreaded(curr->Right(),pre);
if(curr->Right()==NULL)curr->Rth=1;
}
}
书上的算法:遍历过程中,若当前被访问结点的left为空,则让left指向它的前驱结点;若前驱结点的right
为空,让其right指向当前结点,并给相应的lth和rth赋值1。
首先这个算法我就不懂 ,可能导致了整个都不懂吧
谢谢各位了