将树转化为二叉树

通过前面的学习,现在我们应该有能力写一些比较简单的程序了,这里的树转化为二叉树的程序就是本人自己动手写的,相信各位童鞋在学习了前面的知识之后也能够写出这个程序了,具体的实现很简单,只是将二叉树和树的初始化放到一起就可以得到结果了,这里,我选择的建立树的输入为:1 2 5 0 6 0 0 3 7 0 0 4 8 0 0 0 0 得到的结果为1 2 5 6 3 7 4 8,所有的遍历都是基于前序遍历实现

#include <iostream>

using namespace std;
typedef int SElemType;
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct CSNode
{
SElemType data;
struct CSNode *firstchild,*nextsibiling;
}CSNode,*CSTree;
bool InitTree(BiTree &T)//初始化二叉树
{
TElemType s;
cin>>s;
if(s==0) T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return 0;
T->data=s;//初始化二叉树的时候首先从根节点开始,然后在对左子树赋值,再对右子树赋值
InitTree(T->lchild);//左子树赋值
InitTree(T->rchild);//右子树赋值
}
return 1;
}
bool InitCSTree(CSTree &T)//初始化树的操作
{
SElemType s;
cin>>s;
if(s==0) T=NULL;
else
{
if(!(T=(CSTree)malloc(sizeof(CSNode)))) return 0;
T->data=s;
InitCSTree(T->firstchild);
InitCSTree(T->nextsibiling);
}
return 1;
}
bool QTraverse(CSTree T)//前序遍历树的操作
{
CSTree p;
p=T;
if(p==NULL) return 0;
else
{
cout<<p->data<<"  ";
QTraverse(p->firstchild);
QTraverse(p->nextsibiling);
}
return 1;
}
bool StoTree(BiTree &T,CSTree C)//将森林转化成二叉树
{
CSTree p;
p=C;
if(p==NULL) 
{
T=NULL;
return 0;
}
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return 0;
T->data=p->data;
StoTree(T->lchild,p->firstchild);
StoTree(T->rchild,p->nextsibiling);
}
return 1;
}
bool QTraverse(BiTree T)//前序遍历二叉树
{
if(T==NULL) return 0;
else
{
cout<<T->data<<"  ";
QTraverse(T->lchild);
QTraverse(T->rchild);
}
return 1;
}
int main()
{
CSTree tree;
BiTree bitree;
InitCSTree(tree);
cout<<"树遍历的结果为:"<<endl;
QTraverse(tree);
cout<<endl;
StoTree(bitree,tree);
cout<<"已经将树转化为二叉树,下面是二叉树遍历的结果:"<<endl;
QTraverse(bitree);
cout<<"\n可以看到两个前序遍历的结果是一致的……"<<endl;
return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值