中序二叉树线索化 帮我看看吧

woshisheng112 2008-12-31 10:31:25
中序线索树类中有完成二叉树的中序线索化的函数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。
首先这个算法我就不懂 ,可能导致了整个都不懂吧
谢谢各位了
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengcman 2009-01-02
  • 打赏
  • 举报
回复
你自己画棵树,再利用算法自己把线索华出来就明白了
fengcman 2008-12-31
  • 打赏
  • 举报
回复
template <typename Node,typename T>
void InThreaded <Node,T>::InThreaded(Node *curr ,Node*&pre)
{
if(curr!=NULL)
{
InThreaded(curr->Left(),pre); //这句 ,结点往左走,pre还不变吗?还能这样写吗?
/*pre是可以被改变的(注意是Node*&pre 而不是Node*pre)*/
if(pre==NULL) curr->Lth()=1; //置线索 是curr->Left()为空才置1吧?跟pre==null有什么关系?
/*在这个程序中,pre应当是不会指向NULL的,但这样可以解决一些异常情况,当pre为NULL时,只需执行curr->Lth()=1就够了,这只是下面else的简写 版本,就好比下面语句if(curr->Right()==NULL)curr->Rth=1; 这跟你上面说的也没关系,但这就相当于pre->Right()==NULL curr==NULL,只需执行
pre->Rth()=1就够了*/
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;
}
}
woshisheng112 2008-12-31
  • 打赏
  • 举报
回复
能讲清楚点吗?
jieao111 2008-12-31
  • 打赏
  • 举报
回复
InThreaded(curr->Left(),pre); //这句 ,结点往左走,pre还不变吗?还能这样写吗?

递归走到最左节点
jieao111 2008-12-31
  • 打赏
  • 举报
回复
建议你先理解意思,再看代码就容易了
woshisheng112 2008-12-31
  • 打赏
  • 举报
回复
算法是怎样的 谁一步一步说说
china_west 2008-12-31
  • 打赏
  • 举报
回复
数据结构啊
心头的痛啊

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧