摘要:前言的二叉树的完全性检验给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下若设二叉树的深度为,除第层外,其它各层的结点数都达到最大个数,第层所有的结点都连续集中在最左边,这就是完全二叉树。
前言
Weekly Contest 115的 二叉树的完全性检验:
解题思路给定一个二叉树,确定它是否是一个完全二叉树。
百度百科中对完全二叉树的定义如下:
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)
示例1:
输入:[1,2,3,4,5,6] 输出:true 解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。示例2:
输入:[1,2,3,4,5,null,7] 输出:false 解释:值为 7 的结点没有尽可能靠向左侧。提示:
树中将会有 1 到 100 个结点。
本题基本没有难度,且在完全二叉树的百度百科中已经给出了思路:
实现代码判断一棵树是否是完全二叉树的思路
如果树为空,则直接返回false
如果树不为空:层序遍历二叉树
如果一个结点左右孩子都不为空,则pop该节点,将其左右孩子入队列;
如果遇到一个结点,左孩子为空,右孩子不为空,则该树一定不是完全二叉树;
如果遇到一个结点,左孩子不为空,右孩子为空;或者左右孩子都为空;则该节点之后的队列中的结点都为叶子节点;该树才是完全二叉树,否则就不是完全二叉树;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
* 958. 二叉树的完全性检验
* @param root
* @return
*/
public boolean isCompleteTree(TreeNode root) {
boolean flag=true;
//左子树的标志位
boolean isLeft=false;
if(root!=null){
Queue queue=new LinkedList<>();
queue.add(root);
while (queue.size()!=0){
TreeNode node=queue.poll();
TreeNode left=node.left;
TreeNode right=node.right;
if((left==null && right!=null)//左节点为null,且右节点不为null(是否为叶子节点)
|| (isLeft && (left!=null || right!=null))){//如果为左子树,则左右节点都不能为null
flag=false;
break;
}
if(left!=null){
queue.offer(left);
}
if(right!=null){
queue.offer(right);
}else{
isLeft=true;
}
}
}else{
flag=false;
}
return flag;
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72717.html
摘要:同样结点树的二叉树,完全二叉树的深度最小。二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表。 二叉树的概念 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 showImg(https://seg...
摘要:当集合为空时,称该二叉树为空二叉树。也就是说,如果一个二叉树的层数为,且结点总数是,则它就是满二叉树。完全二叉树完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。 ...
阅读 1670·2021-11-24 10:20
阅读 3879·2021-11-24 09:38
阅读 2549·2021-09-27 13:37
阅读 2517·2021-09-22 15:25
阅读 2530·2021-09-01 18:33
阅读 3718·2019-08-30 15:55
阅读 2058·2019-08-30 15:54
阅读 2350·2019-08-30 12:50