判断一棵树是否是完全二叉树
来源:互联网 发布:linux脚本注释 编辑:程序博客网 时间:2024/05/06 09:54
【题目】
有一棵二叉树,请设计一个算法判断它是否是完全二叉树。
给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。
【分析】完全二叉树树主要有两点:
- 当一个结点有右孩子,但是没有左孩子,直接返回false
- 当一个节点有左孩子无右孩子,那么接下来要遍历的节点必须是叶子结点。(叶子结点左右孩子为空)
使用层次遍历并检查倒数第二层是否满以及是否有元素有右孩子无左孩子即可。
这两个条件看似比较简单,第二点我还是花了好长时间才理解,因为我当时楞是想不通下图中的情况:
图中的情况,红色结点左孩子有,右孩子为空,我没想明白怎么判断下一层还有结点的情况,甚至想到去统计个数,但是这样太复杂。事实上,只需要使用一个变量,leaf用来标记是否一个结点有左孩子无右孩子,如红色结点,leaf=true。我使用层次遍历,接下来会遍历到绿色节点,由于leaf为true,绿色结点不能有孩子,所以不满足,返回false。
【代码】
class CheckCompletion {public: bool chk(TreeNode* root){ return root == NULL ? false : check_detail(root); }private: bool check_detail(TreeNode* t){ bool res = true; queue<TreeNode*> que; que.push(t); while(!que.empty()){ for(int i=0; i<que.size(); ++i){ TreeNode* tmp = que.front(); que.pop(); if(tmp->left == NULL && tmp->right != NULL){ res = false; break; } if(tmp->left != NULL) que.push(tmp->left); if(tmp->right != NULL) que.push(tmp->right); } } return res; }};
0 0
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- ~判断一棵树是否是完全二叉树~
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树。
- 二叉树--判断一棵树是否是完全二叉树
- 判断是否是完全二叉树
- 判断是否是完全二叉树
- 判断是否是完全二叉树
- 判断一颗树是否是完全二叉树
- 判断一棵树是否是完全二叉树【每日一题】
- 数据结构面试题/判断一棵树是否是完全二叉树
- 判断一棵树是否是一个完全二叉树?
- 2016 排行前20 的编程语言
- Android 7.0 SystemUI(2)--Multi-Window多窗口模式
- 输入输出流操作同一个文件的问题及解决办法
- linux服务器-LAMP安装配置1-依赖包、apache安装
- ES2015函数扩展 - 函数参数的默认值
- 判断一棵树是否是完全二叉树
- 实验环境配置
- nginx 基本入门(至今为止见过最好的 nginx 入门文章,没有之一。)
- ios开发文章
- Java中BitSet的使用及详解
- 仿即刻APP点赞桃心的效果
- javascript onload
- 摘要onTouch初入理解
- 杂七杂八的链接整理