摘要:前言的二叉树的完全性检验给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下若设二叉树的深度为,除第层外,其它各层的结点数都达到最大个数,第层所有的结点都连续集中在最左边,这就是完全二叉树。
前言
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){ Queuequeue=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...
摘要:当集合为空时,称该二叉树为空二叉树。也就是说,如果一个二叉树的层数为,且结点总数是,则它就是满二叉树。完全二叉树完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。 ...
阅读 1337·2021-11-24 10:20
阅读 3615·2021-11-24 09:38
阅读 2270·2021-09-27 13:37
阅读 2172·2021-09-22 15:25
阅读 2227·2021-09-01 18:33
阅读 3474·2019-08-30 15:55
阅读 1762·2019-08-30 15:54
阅读 2058·2019-08-30 12:50