现在的位置: 首页 > 综合 > 正文

中序线索化 二叉树

2013年10月07日 ⁄ 综合 ⁄ 共 1823字 ⁄ 字号 评论关闭

最近在学 二叉树  自己写了一个中序线索化 二叉树 但生成线索二叉树的函数有问题  希望 有高手 能帮忙 点拨一下

#include"iostream.h"
struct Node{//二叉树结点
 int data;
 Node*left;
 Node*right;
 int ltag;//线索化标志
 int rtag;//线索化标志
};
class binarytree{
protected:
 Node*root;
 void preonder(Node*T);//前序遍历
 void inonder(Node*T);//中序遍历
 void postonder(Node*T);
public:
    binarytree(){root=NULL;}
 void creattree(Node*&T);//创建数的函数
 void show1();//前序遍历函数
 void show2();
 void show3();
    Node*&getroot();//得到根结点的引用
 void Inthreading(Node*&T,Node*&pre);//线索化二叉树
 void INthreadingtree();// 主调函数 调用 前一个函数Inthreading
 Node* find(Node*t,int x);//查找结点
 Node*getRoot();
 Node* FOUND(int e);//查找结点
 Node* findprior(int e);//查找线索化地前驱
};
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);
}
void binarytree::inonder(Node*T){
  if(T==NULL) return;
  inonder(T->left);
  cout<<T->data<<' ';
     inonder(T->right);
}
void binarytree::show2(){
 inonder(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(){
 // creattree(root);
  Node*pre=NULL;
     Inthreading(root,pre);
}
Node* binarytree::find(Node*t,int x){
    Node* m;
 if(t){
 if(t->data==x) return t;
     m=find(t->left,x);
  if(m) return m;
     m=find(t->right,x);
  if(m) return m;
 }
    return NULL;
}
Node* binarytree::getRoot(){
 return root;
}
void main(){
 binarytree b;
 b.creattree(b.getroot());//
 b.INthreadingtree();//这个线索化函数导致 程序崩溃 导致其他功能无发实现
 b.show2();
}  

抱歉!评论已关闭.