鱼C论坛

 找回密码
 立即注册
查看: 6221|回复: 6

数据结构 线索二叉树 小甲鱼代码有个地方不明白

[复制链接]
发表于 2014-5-25 20:16:05 | 显示全部楼层
(*p)->lchild = T; //p是指针的指针
                pre = *p; //pre是指针
                InThreading(T); //调用这个函数,你注释的是中序遍历线索化
                pre->rchild = *p; //做孩子赋值为一个指针。。。*p
                pre->rtag = Thread; //rtag 标记为Thread
                (*p)->rchild = pre;//*p的右孩子为pre.......
给你个解释吧!希望你能明白,首先你得知道*p(注意这里是个二级指针,蛋疼的很)表示什么,它表示我们第一次创建的pre,就是用malloc动态分配了个堆给他,然后*p指向这个新分配的内存,第一点你要明白的是*p它只是赋值给pre,在整个函数期间这个*p一直没变,始终指向那个新分配的内存,第二点,pre =* p;就是把pre的值指向了新分配的内存,而这个pre在函数InThreading(T)被修改,在函数InThreading(T)调用完后,pre指向了树最右边的最后一个节点了。而这时*p还是指向新分配的内存。 pre->rchild = *p,这句表示把树右边的最后一个节点右孩子指向那个新分配的内存(节点),当然还要把最后这个节点的rtag标志改为线索化。最后指向新内存的(*P)的右孩子就要指向树的最后那个节点,这样就形成了一个回路,有点类似循环链表,我已经说得很详细了。:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表