二叉树的作业 作业 求大神帮忙修改代码啊!!!
实验内容1.创建二叉树;
2.实现二叉树的水平输出算法;
3.完成对二叉树进行深度和叶子数目统计的算法;
4.完成对二叉树的中序遍历输出算法。
(注意 这不是什么课程设计 也不是专业什么的。。。是选修 选修啊啊啊 复习大军杀到 选修作业提交紧逼 大神。大神在哪里~~~ 求解啊 考完了再补上 啊啊啊)
[ 本帖最后由 mz_zml 于 2013-6-29 09:47 编辑 ]
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int sum=0,num=1;
typedef struct BIRE
{
char data;
struct BIRE *lchild,*rchild;
} BN,*BP;
void PreOrderTraverse(BP M)/*先序*/
{
if(M!=NULL)
{
printf("%c",M->data);
PreOrderTraverse (M->lchild);
PreOrderTraverse (M->rchild);
}
}
BP CreatTree()/*先根节点,然后左(R)最后右(L)创建树*/
{
char ch;
BP M;
scanf("mmm %c",&ch);
if(ch==' ')
M=NULL;
else
{
M=(BN *)malloc(sizeof(BN));/*为结点开辟空间*/
M->data=ch;
M->lchild=CreatTree();
M->rchild=CreatTree();
}
return (M);
}
void InOrderTraverse(BP M)/*中序*/
{
if(M!=NULL)
{
InOrderTraverse (M->lchild);
printf("%c",M->data);
sum=sum+1;
InOrderTraverse(M->rchild);
}
}
int Depth(BP M)/* 深度 */
{
if(M==NULL)
return(0);
else
return 1+(Depth(M->lchild)>Depth(M->rchild)? Depth(M->lchild):Depth(M->rchild));
}
int PostOrderTraverse(BP M)/*后序*/
{
if(M!=NULL)
{
PostOrderTraverse (M->lchild);
PostOrderTraverse (M->rchild);
printf("%c",M->data);
}
return sum;
}
void PrintBTree(BP root,int level)
{
int i;
if(root!=NULL)
{
PrintBTree(root->rchild,level+1);
for(i=1; i<=8*level; i++)
printf(" ");
printf("-------%c\n",root->data);
PrintBTree(root->lchild,level+1);
}
}
int main(void)/*主函数*/
{
BP M;
int sm;
M=CreatTree();
printf("先序遍历:\n");
PreOrderTraverse(M);
printf("\n中序遍历:\n");
InOrderTraverse (M);
printf("\n后序遍历:\n");
PostOrderTraverse (M);
printf("\n深度为:%d",Depth(M));
printf("\n");
sm= PostOrderTraverse (M);
printf("\n结点总数为:\n%d",sm);
printf("二叉树水平输出如下:\n");
PrintBTree(M,1);
return 0;
}