求一个完整的二叉树遍历的程序

C或C++编写的都行,尽量不要出错,谢谢... C或C++编写的都行,尽量不要出错,谢谢 展开
 我来答
t522535261
推荐于2017-12-16 · TA获得超过198个赞
知道答主
回答量:90
采纳率:100%
帮助的人:51.6万
展开全部
#include<stdio.h>
#include<malloc.h>
int i = 0;
typedef struct treeNODE
{
char data;
struct treeNODE *lchild , *rchild , *parent ;
}treenode , *tree;

/////////////////////////////////////////////////////////////////////////////////
//////二叉树的建立

tree creat(tree root)
{
char ch;
ch = getchar();
if(ch == '#')
root = NULL;
else
{
root = (treenode*)malloc(sizeof(treenode));
root->data = ch;
root->lchild = creat(root->lchild);
root->rchild = creat(root->rchild);
}
return root;
}
/////////////////////////////////////////////////////////////////////////////////
/////中序遍历
void traverse(tree root)
{
if(root)
{

traverse(root->lchild);
printf(" %c ",root->data);
traverse(root->rchild);
}
}

/////////////////////////////////////////////////////////////////////////////////
/////先序遍历

void traverse1(tree root)
{
if(root)
{
printf(" %c ",root->data);

traverse1(root->lchild);

traverse1(root->rchild);
}
}

////////////////////////////////////////////////////////////////////////////////
/////后序遍历

void traverse2(tree root)
{
if(root)
{

traverse(root->lchild);

traverse(root->rchild);
printf(" %c ",root->data);
}
}

//////////////////////////////////////////////////////////////////////////////////
///////计算叶子数

int leaf(tree root )
{
int num1 = 0 , num2 = 0;
if(root == NULL)

return 0;

if(root->lchild ==NULL && root->rchild == NULL)
return 1;
else
{num1++;
leaf(root->lchild );
num2++;
leaf(root->rchild );
return num1+num2;
}

}

/////////////////////////////////////////////////////////////////////////////////
//////结点数

int node(tree root)
{
int num1 , num2;
if(!root)
return 0;
if(root->lchild == NULL &&root->rchild ==NULL)
return 1;

else
{

num1 = node(root->lchild);

num2 = node(root->rchild);
}
return num1+num2 +1 ;
}

/////////////////////////////////////////////////////////////////////////////////
///////复制二叉树

tree copy(tree root)
{
tree root1;
// root1 = (treenode*)malloc(sizeof(treenode));
if(!root)
return NULL;

{
root1 = (treenode*)malloc(sizeof(treenode));
root1->data = root->data;
root->lchild = root1->lchild = copy( root->lchild );
root->rchild = root1->rchild = copy( root->rchild );

return root1;
}

}

////////////////////////////////////////////////////
////左右子树交换
void chage(tree p)
{
tree t;
if(p==NULL)
return ;
else
{
chage(p->lchild);
chage(p->rchild);
t = p->lchild;
p->lchild = p->rchild;
p->rchild = t;
}

}
///////////////////////////

void main()
{
tree t=NULL , node1;

printf("输入树的数据\n");
t = creat(t);
printf("中序遍历\n");
traverse(t);
printf("\n");
printf("先序遍历\n");
traverse1(t);
printf("\n");
printf("后序遍历\n");
traverse2(t);
printf("\n");

printf("叶子数 %d \n",leaf(t));
printf("节点数%d\n",node(t));
node1 = copy(t );
traverse(node1);
printf("\n");
chage(t);
traverse(t);

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式