数据结构的题目,求大神用c++帮我做这题,能用vs2010运行出来就给分 实验目的及要求
数据结构的题目,求大神用c++帮我做这题,能用vs2010运行出来就给分实验目的及要求使用二叉链表创建一棵二叉树,并完成如下操作:(1)对这棵二叉树分别进行先序、中序、后...
数据结构的题目,求大神用c++帮我做这题,能用vs2010运行出来就给分
实验目的及要求
使用二叉链表创建一棵二叉树,并完成如下操作:
(1) 对这棵二叉树分别进行先序、中序、后序遍历;
(2) 统计这棵二叉树的深度、叶子结点数、结点总数;
(3) 销毁这棵二叉树。 展开
实验目的及要求
使用二叉链表创建一棵二叉树,并完成如下操作:
(1) 对这棵二叉树分别进行先序、中序、后序遍历;
(2) 统计这棵二叉树的深度、叶子结点数、结点总数;
(3) 销毁这棵二叉树。 展开
2个回答
展开全部
//树入上图,下图是程序运行结果
//默认数据类型为char,输入0表示到达叶子节点
//注意二叉树建树是先序的
#include<stdio.h>
#include<stdlib.h>
int num_node=0;//节点数
int num_leaf=0;//叶子节点数
typedef struct BitTree
{
char data;
BitTree *lchild,*rchild;
int depth;
} BTree,*pBTree;
void CreateTree(pBTree *p)
{
char c=' ';
while(c==' '||c=='\n') //防止误将空格或者换行符输入
scanf("%c",&c);
if(c=='0')return ;//默认输入0时到树叶
*p=(pBTree)malloc(sizeof(BTree));
(*p)->data=c;
(*p)->rchild=(*p)->lchild=NULL;
(*p)->depth=0;
CreateTree(&((*p)->lchild));//建立左子树
CreateTree(&((*p)->rchild));//建立右子树
}
void DestoryTree(pBTree *p)
{
if((*p)==NULL)return ;
DestoryTree(&((*p)->lchild));
DestoryTree(&((*p)->rchild));
free(*p);
}
void GetDepth(pBTree *p,int depth)//统计深度
{
if((*p)==NULL)return ;
(*p)->depth=depth;
GetDepth(&((*p)->lchild),depth+1);
GetDepth(&((*p)->rchild),depth+1);
}
void Sum(pBTree p)//统计节点数和叶子节点数
{
if(p==NULL)return ;
num_node++;
if(p->lchild==NULL&&p->rchild==NULL)
num_leaf++;
Sum(p->lchild);
Sum(p->rchild);
}
void Preorder(pBTree p)
{
//前序遍历
//先访问根节点,然后访问左子树,最后访问右子树
if(p==NULL)return ;
printf("%c深度为%d ",p->data,p->depth);
Preorder(p->lchild);
Preorder(p->rchild);
}
void Inorder(pBTree p)
{
//中序遍历
//先访问左子树,然后访问根节点,最后访问右子树
if(p==NULL)return ;
Inorder(p->lchild);
printf("%c深度为%d ",p->data,p->depth);
Inorder(p->rchild);
}
void Postorder(pBTree p)
{
//后序遍历
//先访问左子树,然后访问右子树,最后访问根节点
if(p==NULL)return ;
Postorder(p->lchild);
Postorder(p->rchild);
printf("%c深度为%d ",p->data,p->depth);
}
int main()
{
pBTree tree;
printf("开始建立二叉树,输入数据:");
CreateTree(&tree);
GetDepth(&tree,1);
printf("先序遍历结果:\n");
Preorder(tree);
printf("\n");
printf("中序遍历结果:\n");
Inorder(tree);
printf("\n");
printf("后序遍历结果:\n");
Postorder(tree);
printf("\n");
Sum(tree);
printf("节点总数%d\n叶子节点数%d\n",num_node,num_leaf);
DestoryTree(&tree);
printf("二叉树已销毁");
return 0;
}
更多追问追答
追问
等我回去试试,能成功运行就采纳
但是我要的是c++版的啊,你这个只改头文件能行吗?
2015-05-05
展开全部
我帮助你
更多追问追答
追问
谢谢
追答
你帮我采纳就帮助你忙
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询