求C语言版二叉树代码
二叉树基本操作要求:需要实现的二叉树操作任务:(1):求二叉树高度(2):判断二叉树是否为满二叉树(3):统计二叉树中叶子结点个数(4):求根结点到指定结点之间的路径(5...
二叉树基本操作
要求:需要实现的二叉树操作任务:
(1):求二叉树高度
(2):判断二叉树是否为满二叉树
(3):统计二叉树中叶子结点个数
(4):求根结点到指定结点之间的路径
(5):二叉树先序遍历操作
(6):二叉树中序遍历操作
(7):二叉树后序遍历操作
子任务:二叉树顺序存储及实现
。。。最好是能帮我写上注释
希望能有个选择菜单供用户选择。最好是上传CPP文件给我。谢谢了 展开
要求:需要实现的二叉树操作任务:
(1):求二叉树高度
(2):判断二叉树是否为满二叉树
(3):统计二叉树中叶子结点个数
(4):求根结点到指定结点之间的路径
(5):二叉树先序遍历操作
(6):二叉树中序遍历操作
(7):二叉树后序遍历操作
子任务:二叉树顺序存储及实现
。。。最好是能帮我写上注释
希望能有个选择菜单供用户选择。最好是上传CPP文件给我。谢谢了 展开
2个回答
展开全部
*创建二叉树:先序创建;
遍历二叉树:先,中,后;
二叉树属性:深度,结点数,叶子结点数;
*/
#include<stdio.h>
#include<malloc.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node *Lchild;
struct Node *Rchild;
}BNode,*BiTree;
BiTree CreateTree()
{
char ch;
BiTree T;
scanf("%c",&ch); //读入一个字符
if(ch==' ') T=NULL;
else{T=(BiTree)malloc(sizeof(BNode)); //生成一个新结点
T->data=ch;
T->Lchild=CreateTree(); //生成左子树
T->Rchild=CreateTree(); //生成右子树
}
return T;
}
void visit(char c)
{
printf("%c",c);
}
void PreOrder(BiTree root)
{if(root!=NULL)
{
visit(root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root)
{if(root!=NULL)
{
InOrder(root->Lchild);
visit(root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root)
{if(root!=NULL)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
visit(root->data);
}
}
int PostTreeDepth(BiTree bt)
{
int h1,h2,max;
if(bt!=NULL)
{
h1=PostTreeDepth(bt->Lchild);
h2=PostTreeDepth(bt->Rchild);
max=h1>h2?h1:h2;
return(max+1);
}
else return(0);
}
int TreeCount(BiTree root)
{
int Count;
if(root==NULL) return(0);
else
Count=TreeCount(root->Lchild)+TreeCount(root->Rchild)+1;
return(Count);
}
int leaf(BiTree root)
{
int LeafCount;
if(root==NULL)
return 0;
else if((root->Lchild==NULL)&&(root->Rchild==NULL))
return 1;
LeafCount=leaf(root->Lchild)+leaf(root->Rchild);
return(LeafCount);
}
void main()
{
BiTree T;
char j;
int flag=1;
//---------------------程序解说-----------------------
printf("本程序实现二叉树的操作。\n");
printf("可以进行建立二叉树;递归先序、中序、后序遍历;二叉树属性:深度,结点数,叶子结点数\n");
//----------------------------------------------------
printf("\n");
printf("请建立二叉树。\n");
T=CreateTree();
getchar();
while(flag)
{
printf("\n");
printf("请选择: \n");
printf("1.递归先序遍历\n");
printf("2.递归中序遍历\n");
printf("3.递归后序遍历\n");
printf("4.二叉树深度\n");
printf("5.二叉树结点数\n");
printf("6.二叉树叶子结点数\n");
printf("0.退出程序\n");
scanf(" %c",&j);
switch(j)
{
case '1':if(T)
{ printf("递归先序遍历二叉树:");
PreOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '2':if(T)
{
printf("递归中序遍历二叉树:");
InOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '3':if(T)
{ printf("递归后序遍历二叉树:");
PostOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '4':if(T)
{
printf("二叉树深度:");
printf("%d",PostTreeDepth(T));
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '5':if(T)
{
printf("二叉树结点数:");
printf("%d",TreeCount(T));
printf("\n");
}
else printf("二叉树为空!\n");
break;
case '6':if(T)
{
printf("二叉树叶子结点数:");
printf("%d",leaf(T));
printf("\n");
}
else printf("二叉树为空!\n");
break;
default:flag=0;printf("程序运行结束,按任意键退出!\n");
}
}
}
希望对你有帮助,如需cpp可以发给你哦
遍历二叉树:先,中,后;
二叉树属性:深度,结点数,叶子结点数;
*/
#include<stdio.h>
#include<malloc.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node *Lchild;
struct Node *Rchild;
}BNode,*BiTree;
BiTree CreateTree()
{
char ch;
BiTree T;
scanf("%c",&ch); //读入一个字符
if(ch==' ') T=NULL;
else{T=(BiTree)malloc(sizeof(BNode)); //生成一个新结点
T->data=ch;
T->Lchild=CreateTree(); //生成左子树
T->Rchild=CreateTree(); //生成右子树
}
return T;
}
void visit(char c)
{
printf("%c",c);
}
void PreOrder(BiTree root)
{if(root!=NULL)
{
visit(root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root)
{if(root!=NULL)
{
InOrder(root->Lchild);
visit(root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root)
{if(root!=NULL)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
visit(root->data);
}
}
int PostTreeDepth(BiTree bt)
{
int h1,h2,max;
if(bt!=NULL)
{
h1=PostTreeDepth(bt->Lchild);
h2=PostTreeDepth(bt->Rchild);
max=h1>h2?h1:h2;
return(max+1);
}
else return(0);
}
int TreeCount(BiTree root)
{
int Count;
if(root==NULL) return(0);
else
Count=TreeCount(root->Lchild)+TreeCount(root->Rchild)+1;
return(Count);
}
int leaf(BiTree root)
{
int LeafCount;
if(root==NULL)
return 0;
else if((root->Lchild==NULL)&&(root->Rchild==NULL))
return 1;
LeafCount=leaf(root->Lchild)+leaf(root->Rchild);
return(LeafCount);
}
void main()
{
BiTree T;
char j;
int flag=1;
//---------------------程序解说-----------------------
printf("本程序实现二叉树的操作。\n");
printf("可以进行建立二叉树;递归先序、中序、后序遍历;二叉树属性:深度,结点数,叶子结点数\n");
//----------------------------------------------------
printf("\n");
printf("请建立二叉树。\n");
T=CreateTree();
getchar();
while(flag)
{
printf("\n");
printf("请选择: \n");
printf("1.递归先序遍历\n");
printf("2.递归中序遍历\n");
printf("3.递归后序遍历\n");
printf("4.二叉树深度\n");
printf("5.二叉树结点数\n");
printf("6.二叉树叶子结点数\n");
printf("0.退出程序\n");
scanf(" %c",&j);
switch(j)
{
case '1':if(T)
{ printf("递归先序遍历二叉树:");
PreOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '2':if(T)
{
printf("递归中序遍历二叉树:");
InOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '3':if(T)
{ printf("递归后序遍历二叉树:");
PostOrder(T);
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '4':if(T)
{
printf("二叉树深度:");
printf("%d",PostTreeDepth(T));
printf("\n");
}
else
printf("二叉树为空!\n");
break;
case '5':if(T)
{
printf("二叉树结点数:");
printf("%d",TreeCount(T));
printf("\n");
}
else printf("二叉树为空!\n");
break;
case '6':if(T)
{
printf("二叉树叶子结点数:");
printf("%d",leaf(T));
printf("\n");
}
else printf("二叉树为空!\n");
break;
default:flag=0;printf("程序运行结束,按任意键退出!\n");
}
}
}
希望对你有帮助,如需cpp可以发给你哦
更多追问追答
追问
发下CPP文件谢谢,这段代码好少的注释,子函数都没写注释
追答
呵呵,都在主函数那标着呢。给你传哪去??
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询