二叉树的线索化

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

 #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();
}
posted @   wangyan9110  阅读(158)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示