跪求大神帮我把下面的C语言改为C++,并输出其前驱和后继

#include<iostream.h>#include<stdlib.h>#include<stdio.h>constintOVERFLOW=0;typedefenum... #include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
const int OVERFLOW=0;
typedef enum PointerTag{LINK=0,THREAD=1};
struct BiThrNode
{
char data;
BiThrNode *lchild, *rchild;
PointerTag LTag, RTag;
};
typedef struct BiThrNode BiThrNode;
typedef BiThrNode * BiThrTree;

void CreateBiTree(BiThrTree &T)
{
char ch;
ch= getchar();
if(ch=='#') T=NULL;
else{
if(!(T = (BiThrNode *)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
T->data= ch;
T->LTag = LINK;
T->RTag = LINK;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return;
}//CreateBiTree
void PrintBiTree(BiThrTree T)
{
if(T)
{
PrintBiTree(T->lchild);
cout<<T->data;
//cout<<T->data;
PrintBiTree(T->rchild);
}
return;
}//PrintBiTree
void InThreading(BiThrTree p,BiThrNode * &pre)
{
if(p){
InThreading(p->lchild,pre);
if(!p->lchild){
p->LTag= THREAD;
p->lchild= pre;
}
if(!pre->rchild){
pre->RTag= THREAD;
pre->rchild= p;
}
pre= p;
InThreading(p->rchild,pre);
}
}//InThreading
void InOrderThreading(BiThrTree& ThrT, BiThrTree T)
{
BiThrNode* pre;
if(!(ThrT = (BiThrNode *)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
ThrT->LTag= LINK;
ThrT->RTag= THREAD;
ThrT->rchild= ThrT;
if(!T) ThrT->lchild = ThrT;
else{
ThrT->lchild= T;
pre= ThrT;
InThreading(T,pre);
pre->rchild= ThrT;
pre->RTag= THREAD;
ThrT->rchild= pre;
}
return;
}//InOrderThreading
void InOrderTraverse_Thr(BiThrTree T)
{
BiThrNode*p;
p= T->lchild;
while(p != T)
{
while(p->LTag == LINK) p = p->lchild;
cout<<p->data;
//cout<<p->data;
while(p->RTag == THREAD && p->rchild != T)
{
p= p->rchild;
cout<<p->data;
//cout<<p->data;
}
p= p->rchild;
}
return ;
}//InOrderTraverse_Thr
InorderPre(BiThrTree p)
{// 在中序线索二叉树中找结点p的中序前驱结点
BiThrTree q;
if (p->LTag==1) // 结点的左子树为空
return p->lchild->data; //结点的左指针域为左线索,指向其前驱
else
{
q=p->lchild; //p结点左子树中最右边结点是P结点的中序前驱
while (q->RTag!=NULL) q=q->rchild;
return (q->data);
} // if
} // InorderPre
//中序后继: 若rtag=1,rchild指向其后继;否则,该结点的后驱是以该结点为根的右子树上按中序遍历的第一个结点。
InorderNext(BiThrTree p)
{// 在中序线索二叉树中找结点p的中序后继结点
BiThrTree q;
if (p->RTag==1) // 结点的右子树为空
return(p->rchild->data); //结点的右指针域为右线索,指向其后继
else
{q=p->rchild; //p结点的右子树中最左边结点是P结点的中序后继
while (q->LTag ) q=q->lchild;
return (q->data);
} // if
} // InorderNext
展开
 我来答
chiqp1986
2013-07-03 · TA获得超过270个赞
知道小有建树答主
回答量:326
采纳率:0%
帮助的人:193万
展开全部
C和C++在数据结构上算法是一样的,只是在实现上C常使用结构,而C++使用类。即前者是面向过程,后都面向对象。你找一本数据结构(C++描述)的书看一看,里面就在你要的东西。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式