二叉树的完全性检验(中等难度)

简介: 二叉树的完全性检验(中等难度)

题目概述(简单难度)

给定一个二叉树,确定它是否是一个完全二叉树。


百度百科中对完全二叉树的定义如下:


若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2 h 2^{h}2

h

 个节点。)


示例 1:

2.png

输入:[1,2,3,4,5,6]
输出:true
解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。


示例2:

2.png


输入:[1,2,3,4,5,null,7]
输出:false
解释:值为 7 的结点没有尽可能靠向左侧。

提示:


树中将会有 1 到 100 个结点。


题目链接:

点我进入leetcode


思路与代码

思路展现

我们来看完全二叉树的判断,判断一棵树是否为完全二叉树的思路我们还是沿用层序遍历的思路,只不过我们是判断每次从队列出来的队头元素和剩余队列中的元素是否为空,当满足从队列出来的队头元素为空和剩余队列中的元素不为空的情况,就说明其不是一个完全二叉树,下面来看代码实现:

关于层序遍历的思路可以参考这篇博客:

点我进入博客

同时给大家拓展了leetcode中关于层序遍历的题目,戳下面的链接便可以进入对应博客:

点我进入博客


代码示例

class Solution {    
    public boolean isCompleteTree(TreeNode root) {
        if(root == null) {
           return true;
        }
       Queue<TreeNode> queue = new LinkedList<>();
       queue.offer(root);
       TreeNode cur1 = root;
       while(!queue.isEmpty()) {
           TreeNode cur = queue.poll();
           if(cur != null) {
              queue.offer(cur.left);
              queue.offer(cur.right);
           }else {
               //发现为空直接跳出循环
               break;
           }
       }
       //此时判断队列剩下的是否还有元素,如果有,说明不是完全二叉树
       while(!queue.isEmpty()) {
           TreeNode node = queue.peek();
           if(node != null) {
               return false;
           }else {
               queue.poll();
           }
       }
       return true;
    }
}

时间复杂度O(N) 其中 N 是树节点个数。

空间复杂度O(N)

总结

此题考察对于完全二叉树的完全性的检验,用到的思路是层序遍历的思路的变形,小伙伴们可以把这道题目与之前层序遍历的那道题目进行一个结合对比,从而掌握其中的精髓.


相关文章
|
7月前
|
机器学习/深度学习 算法 测试技术
【动态规划】【C++算法】1335 工作计划的最低难度
【动态规划】【C++算法】1335 工作计划的最低难度
|
算法
详解时间复杂度计算公式(附例题细致讲解过程)
详解时间复杂度计算公式(附例题细致讲解过程)
1495 0
详解时间复杂度计算公式(附例题细致讲解过程)
|
存储
验证二叉搜索树(中等难度)
验证二叉搜索树(中等难度)
83 0
验证二叉搜索树(中等难度)
树的子结构(中等难度,好题目)
树的子结构(中等难度,好题目)
94 0
树的子结构(中等难度,好题目)
|
存储 算法
全排列(中等难度)
全排列(中等难度)
77 0
全排列(中等难度)
|
算法 测试技术
全排列Ⅱ(中等难度,加入剪枝操作)
全排列Ⅱ(中等难度,加入剪枝操作)
123 0
全排列Ⅱ(中等难度,加入剪枝操作)
|
算法
二叉树中和为某一值的路径(中等难度)
二叉树中和为某一值的路径(中等难度)
87 0
二叉树中和为某一值的路径(中等难度)
|
存储 算法
旋转链表(中等难度)
旋转链表(中等难度)
78 0
旋转链表(中等难度)
二叉搜索树的后序遍历序列(中等难度)
二叉搜索树的后序遍历序列(中等难度)
91 0
二叉搜索树的后序遍历序列(中等难度)