线索二叉树
在严蔚敏的《数据结构》一书中,所使用的代码存在一些小问题。原版代码就不附上了,主要问题是:
1.InThreading函数的参数,应该携带pre,这应该是比较严重的问题。如果没有携带pre,则对pre的修改只是在调用的函数中的局部变量的值的修改,没有影响到原来的pre的值。
2.在条件语句中,将命中概率高的语句放在前面,会提高代码效率。但严的算法中在InOrderThreading算法中,将T为NULL时放在了前面。
3.InOrderThreading中,只有T为NULL时,执行Thrt->rchild = Thrt才有意义。而在T不为NULL时,要执行Thrt->rchild = pre,即使开始执行了Thrt->rchild = Thrt,也会被覆盖掉,所以把Thrt->rchild = Thrt句移到了else分句中。
- Status InOrderThreading(BiTree Thrt, BiTree T)
- {
- Thrt->LTag = Link;
- Thrt->RTag = Thread;
- if(T)
- {
- Thrt->lchild = T;
- pre = Thrt;
- InThreading(T, pre);
- pre->RTag = Thread;
- pre->rchild = Thrt;
- Thrt->rchild = pre;
- }
- else
- {
- Thrt->lchild = T;
- Thrt->rchild = Thrt;
- }
- }
- void InTreading(BiTree p, BiTree pre)
- {
- if(p)
- {
- InThreading(p->lchild, pre);
- if(!p->lchild)
- {
- p->LTag = Thread;
- p->lchild = pre;
- }
- if(!pre->rchild)
- {
- pre->RTag = Thread;
- p->rchild = p;
- }
- pre = p;
- InThreading(p->rchild, pre);
- }
- }
欢迎讨论、批评与指正!
ALex ZhonG