判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)
2015-09-14 09:00 只喝牛奶的杀手 阅读(524) 评论(0) 编辑 收藏 举报#include "stdio.h"
#include "malloc.h"
int count;
typedef struct node
{
char data;
struct node *LChild;
struct node *RChild;
}BiTNode,*BiTree;
void creatbitree(BiTree * bt) // 先序便历序列创建二叉树链表
{
char ch=getchar();
if (ch=='#')
{
*bt=NULL;
}
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
creatbitree(&((*bt)->LChild));
creatbitree(&((*bt)->RChild));
}
}
int ProOrder(BiTree root) // 先序便历输出二叉树节点
{
if (root!=NULL)
{
printf("%c ",root->data); // 输出根节点
count++;
ProOrder(root->LChild);
ProOrder(root->RChild);
}
return count;
}
int PostTreeDepth(BiTree bt) // 后序便历求二叉树的高度
{
int hl,hr,max;
if (bt!=NULL)
{
hl=PostTreeDepth(bt->LChild);
hl=PostTreeDepth(bt->LChild);
max=hl>hr?hl:hr ;
return (max+1) ;
}
else
return 0;
}
void Judgment(int m,int n) // 判断该二叉树是否为满二叉树
{
int s=1;
for (int i=1;i<=n;i++)
{
s=s*2;
}
if (s-1==m)
{
printf("是满二叉树!\n");
}
else
{
printf("不是满二叉树!\n");
}
}
void main()
{
int c,h;
count=0;
BiTree root;
creatbitree(&root);
c=ProOrder(root);
h=PostTreeDepth(root);
printf("节点的总数:%d\n",count);
printf("二叉树的深度:%d\n",h);
Judgment(c,h);
}
原CSDN链接地址:http://blog.csdn.net/sha_520/article/details/7397534
欢迎大家关注微信号killerhub,微信公众号名称:只喝牛奶的杀手, 扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端