完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

所以判断完全二叉树须满足两个条件:
1所有叶子节点处的深度均为二叉树的深度
2不存在只有右孩子而没有孩子的节点
求深度即可,主要是递归有点绕
递归一次,深度加一,返回一次,深度减一

#include<iostream>
using namespace std;
#define  ElemType  charstruct BiTree {ElemType data;BiTree* Lchild, * Rchild;
};
void createBiTree(BiTree* &T)
{ElemType temp;temp = getchar();if (temp == '#'){T = NULL;}else{T = new BiTree;T->data = temp;createBiTree(T->Lchild);createBiTree(T->Rchild);}
}
void InOrder(BiTree* T)
{if (T){InOrder(T->Lchild);cout << T->data;InOrder(T->Rchild);}
}
void Deepth(BiTree* T,int& temp, int& n)
{if (T){temp++;Deepth(T->Lchild,temp,n);Deepth(T->Rchild,temp,n);}else {if (temp > n)n = temp;temp--;}
}
void IsBest(BiTree* T, int &n, int &temp,bool &temp1)
{if (T){temp++;if (T->Lchild == NULL && T->Rchild!=NULL)temp1 = false;IsBest(T->Lchild, temp, n,temp1);IsBest(T->Rchild, temp, n,temp1);}else{if (temp != n)temp1 = false;temp--;}
}
int main()
{BiTree* T;bool temp1=true;T = NULL;int temp, n;temp = 0;n = 0;createBiTree(T);InOrder(T);Deepth(T, temp, n);temp = 0;cout << n;IsBest(T, n, temp,temp1);if (!temp1)cout << "no";elsecout << "yes";return 0;
}

判断完全二叉树及求二叉树深度完整代码相关推荐

  1. 求二叉树深度算法(深度优先、广度优先)

    求二叉树深度的算法 求二叉树深度 方法一:深度优先的遍历方式 方法二:广度优先的遍历方式 总结 求二叉树深度 注:本文中二叉树通过二叉链表构建. 节点类型定义如下: struct node{char ...

  2. 【数据结构】求二叉树深度的算法

    要求二叉树的深度,方法是先求出左子树的深度,再求出右子树的深度,二叉树的深度就是左子树的深度和右子树的深度中的最大值加1. 自然而然想到用后根遍历的思想实现 主要步骤如下: 若二叉树为空,则返回0值, ...

  3. 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像

    1.判断二叉树是否为完全二叉树: 层序遍历,从上到下,从左到右,遍历二叉树: 当遇到一个节点的左子树为空时,则该节点的右子树为空和后面遍历的节点都为叶子节点,否则不是完全二叉树. 当该节点只有左子树时 ...

  4. C++求二叉树深度的两种方法

    今天在leetcode中碰到了求二叉树的深度问题,于是总结一下这两种方法 方法一是用递归的方法,方法二是借助队列和层序遍历的思想 #include<iostream> #include&l ...

  5. 求二叉树深度以及寻找二叉树中某一节点值

    求二叉树的深度依然用的是二叉树递归的特性.二叉树的深度就是你根节点的这一层加上他左孩子或者右孩子中深度大的哪一个,同样这也能被划分为子问题. size_t BTreeDepth(BTNode* roo ...

  6. C++期末考试1:求圆柱体体积(完整代码含测试)

    大家好,我是执念斩长河.昨天周四12.30进行了C++期末考试机试,题目比较简单,我直接做了出来,放在博客里,有同学需要可点击收藏.考试1内容就是博文标题. 题目再现 用C++类实现圆柱体体积,需要用 ...

  7. 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)

    // Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  8. 判断三角形与射线相交的完整代码。。。

    // Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  9. 前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...

    二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode ...

最新文章

  1. Matplotlib实例教程(十二)箱形图
  2. RocketMQ:NameServer路由管理源码分析
  3. 平台还是代购?海外贸易之争趋近尾声
  4. Elastic-Job任务类
  5. 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
  6. lnmp 修改mysql密码_Lnmp下修改mysql根密码
  7. 公务员计算机考试题库,公务员考试题库
  8. 苹果A14芯片组件曝光,iPhone 12发布不远了?
  9. iOS 浅复制和深复制的深层理解,含示例
  10. letex编辑输出】pdf文件嵌入字体embedded fonts的问题
  11. Scrum如何拥抱变化
  12. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
  13. 分销平台传统的宣传流程
  14. Cheat Enginee(CE)对扫雷中部分属性的内存地址寻找以及修改~逆向分析
  15. python足球数据可视化_欧洲足球,5大联赛!Python爬虫数据可视化带你解析经典赛事...
  16. 5个一见钟情的手机APP软件 使用过后必须赞赞赞
  17. golang游戏开发学习笔记-创建一个能自由探索的3D世界
  18. 气动调节阀的用途安装知识
  19. avos win32 UI api 架构
  20. 2022年如何寻找外链资源?

热门文章

  1. 创业规定(努力做好自己)
  2. citra 图形设置_用户发送|这或是我们第一次看下代Windows10的新图形用户界面
  3. JavaScript - 唤醒 app store 跳转到苹果商店内下载指定应用页面
  4. mysql (errcode 2)_“File '/usr/share/mysql/charsets/?.conf' not found (Errcode: 2)”,出错急救!...
  5. 计算机网络(九):文件传输协议FTP
  6. librosa音频处理教程
  7. 2.5 CPU管理--进程同步经典问题-司机和售票员问题
  8. 如何使用C语言实现小人在屏幕上移动?
  9. 小程序组件onload_微信小程序自定义组件(一)
  10. MyBatis的example的用法