二叉树的线索化
最近学了线索二叉树 自己也写了一个中序线索化 二叉树 但出现了错误 无法实现 希望高手指点一下 发现哪错了 谢谢
#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/ 谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架