• 二叉树的线索化


    最近学了线索二叉树 自己也写了一个中序线索化 二叉树  但出现了错误  无法实现 希望高手指点一下 发现哪错了 谢谢

     #include<iostream.h>

    struct Node{//二叉树结点
    int data;
    Node*left;
    Node*right;
    int ltag;//线索化标志
    int rtag;//线索化标志
    };
    class binarytree{
    protected:
    Node*root;
    void preonder(Node*T);//前序遍历
    public:
        binarytree(){root=NULL;}
    void creattree(Node*&T);//创建数的函数
    void show1();//前序遍历函数
    void Inthreading(Node*&T,Node*&pre);//线索化二叉树
    void INthreadingtree();// 主调函数 调用 前一个函数Inthreading
    Node*& getroot();//得到根节点
    };
    void binarytree::creattree(Node*&T){
    int x;
    cin>>x;
    if(x==0) T=NULL;
    else{
        T=new Node;
        T->data=x;
    T->ltag=0;
    T->rtag=0;
             creattree(T->left);
             creattree(T->right);
    }
    }
    void binarytree::preonder(Node*T){
    if(T){
    cout<<T->data;
            preonder(T->left);
            preonder(T->right);
    }
    }
    void binarytree::show1(){
    preonder(root);
    }
    Node*& binarytree::getroot(){
    return root;
    }
    void binarytree::Inthreading(Node*&T,Node*&pre){
       if(T==NULL) return ;
    Inthreading(T->left,pre);//pre 为标记 p遍历的前驱
    if(!T->left){
    T->left=pre;
    T->ltag=1;
    }
    if(!pre->right&&pre){ 
    pre->rtag=1;
        pre->right=T;
    }
      pre=T;//修改pre 使他指向前一结点
             Inthreading(T->right,pre);
    }
    void binarytree::INthreadingtree(){
    Node*pre=NULL;
         Inthreading(root,pre);
    }
     
     
    void main(){
    binarytree b;
    b.creattree(b.getroot());
    b.INthreadingtree();//这个线索化函数导致 程序崩溃 导致其他功能无实现
    b.show1();
    }
    ----转载请注明出处http://www.cnblogs.com/JerryWang1991/ 谢谢!
  • 相关阅读:
    12小时制时间
    sqlserver 安装和配置
    建议71:区分异步和多线程应用场景
    AVD管理器提示:PANIC:Could not open:AVD名称 解决办法
    一道看似复杂但是简单的c#面试题
    XML Schema 配置文件自动生成c#类设计案例子
    VS2010中的调试技巧 断点
    文章已被删除
    使用MONO使.net程序脱离.net框架运行
    5个很好用的.net 分析工具
  • 原文地址:https://www.cnblogs.com/JerryWang1991/p/3936401.html
Copyright © 2020-2023  润新知