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二叉树的最大宽度

958. 二叉树的完全性检验

Leetcode-958 Check Completeness of a Binary Tree(二叉树的完全性检验)

leetcode 二叉树的完全性检验 中等

代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数