958. 二叉树的完全性检验
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了958. 二叉树的完全性检验相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个二叉树,确定它是否是一个完全二叉树。
说明
一、题目
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)
二、分析
- 题目也不难,关键是要明白完全二叉树的一些性质。
- 我们这里采用层次遍历的方式来判断,一旦我们的队列中出现了
null
,也就说明如果是一个完全二叉树,遍历已经到头了。 - 之后我们只需要对队列中的元素再进行一次遍历,看一下有没有非空的值即可。
- 在循环中可以采用一个小小的剪枝方法,也就是当左子树为空但是右子树不为空时,直接退出返回
false
,因为直接违背了完全二叉树的性质。
/**
* Definition for a binary tree node.
* public class TreeNode
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode()
* TreeNode(int val) this.val = val;
* TreeNode(int val, TreeNode left, TreeNode right)
* this.val = val;
* this.left = left;
* this.right = right;
*
*
*/
class Solution
public boolean isCompleteTree(TreeNode root)
if(root == null) return true;
Queue<TreeNode> queue = new LinkedList();
queue.add(root);
while(!queue.isEmpty())
final TreeNode temp = queue.poll();
if(temp == null) break;
if(temp.left == null && temp.right != null) return false;
queue.add(temp.left);
queue.add(temp.right);
while(!queue.isEmpty()) if(queue.poll() != null) return false;
return true;
总结
熟悉完全二叉树的性质和层次遍历的方法。
以上是关于958. 二叉树的完全性检验的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—958. 二叉树的完全性检验
二叉树有关习题整理 144二叉树的前序遍历 100相同的树 101对称二叉树 110平衡二叉树 958二叉树的完全性检验 662二叉树的最大宽度
Leetcode-958 Check Completeness of a Binary Tree(二叉树的完全性检验)
代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数