代码改变世界

判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)

  只喝牛奶的杀手  阅读(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

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示