数据结构

#include
#include
using namespace std;
struct Node
{
string data;
Node* rchild;
Node* lchild;
int index;
Node():data(""),rchild(nullptr),lchild(nullptr),index(0){}
};
struct Node_static
{
string data;
int lchild;
int rchild;
int index;
Node_static():data(""),lchild(-1),rchild(-1){}
};
static int i=0;
Node* CreateTree() //先序创建动态二叉链表
{
Nodetree;
string str;
cin>>str;
if(str=="#")
tree=nullptr;
else
{
tree=new Node;
tree->data=str;
tree->index=i++;
//cout<<“这一步你的输入将被存储在左孩子\n”;
tree->lchild=CreateTree();
//ibcout<<“这一步你的输入将被存储在右孩子\n”;
tree->rchild=CreateTree();
}
return tree;
}
static int j=0;
void exchange(Node
tree,Node_static a[]) //中序遍历转静态二叉链表
{
if(tree->lchild!=nullptr) exchange(tree->lchild,&a[0]);
a[j].data=tree->data;
a[j].index=tree->index;
if(tree->lchildnullptr)
a[j].lchild=-1;
else a[j].lchild=tree->lchild->index;
if(tree->rchild
nullptr)
a[j].rchild=-1;
else a[j].rchild=tree->rchild->index;
j++;
if(tree->rchild!=nullptr) exchange(tree->rchild,&a[0]);
}
void PreOrder(Node* t) //先序遍历
{
if(t)
{
cout<data<<"\n";
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
void InOrder(Node* t) //中序遍历
{
if(t)
{
InOrder(t->lchild);
cout<data<<"\n";
InOrder(t->rchild);
}
}
int main()
{
Node*t=CreateTree();
cout<<endl;
Node_static a[20];
cout<<“中序遍历的结果为:”<<endl;
InOrder(t);
cout<<endl;
exchange(t,a);
printf(“i\tdata\tlchild\trchild\t\n”);
for(int m=0;m<i;m++)
{
cout<<a[m].index<<"\t"<<a[m].data<<"\t"<<a[m].lchild<<"\t"<<a[m].rchild<<"\n";
}
}//数据在紫皮书129页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BabiMonkey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值