zoukankan      html  css  js  c++  java
  • 线索二叉树

    在严蔚敏的《数据结构》一书中,所使用的代码存在一些小问题。原版代码就不附上了,主要问题是:

    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分句中。

    1. Status InOrderThreading(BiTree Thrt, BiTree T)  
    2. {  
    3.     Thrt->LTag = Link;  
    4.     Thrt->RTag = Thread;  
    5.     if(T)  
    6.     {  
    7.         Thrt->lchild = T;  
    8.         pre = Thrt;  
    9.         InThreading(T, pre);  
    10.         pre->RTag = Thread;  
    11.         pre->rchild = Thrt;  
    12.         Thrt->rchild = pre;  
    13.     }  
    14.     else  
    15.     {  
    16.         Thrt->lchild = T;  
    17.         Thrt->rchild = Thrt;  
    18.     }  
    19. }  

      

    1. void InTreading(BiTree p, BiTree pre)  
    2. {  
    3.     if(p)  
    4.     {  
    5.         InThreading(p->lchild, pre);  
    6.         if(!p->lchild)  
    7.         {  
    8.             p->LTag = Thread;  
    9.             p->lchild = pre;  
    10.         }  
    11.         if(!pre->rchild)  
    12.         {  
    13.           pre->RTag = Thread;  
    14.           p->rchild = p;  
    15.         }  
    16.         pre = p;  
    17.         InThreading(p->rchild, pre);  
    18.     }  
    19. }  

    欢迎讨论、批评与指正!

    ALex ZhonG


    原文链接:http://blog.csdn.net/poechant/article/details/4811479

  • 相关阅读:
    Linux程序分析工具介绍—ldd,nm
    Makefile学习(三)[第二版]
    Linux下的tree命令 --Linux下目录树查看
    Makefile学习(二)[第二版]
    Makefile学习(一)[第二版]
    Linux下top命令详解
    Shell编程入门(第二版)(下)
    mysql用命令行导入sql文件
    javascript的onbeforeunload函数在IOS上运行
    mysql如何利用Navicat 导出和导入数据库
  • 原文地址:https://www.cnblogs.com/10jschen/p/2637973.html
Copyright © 2011-2022 走看看