二叉树的作业 作业 求大神帮忙修改代码啊!!!
实验内容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; }