Leetcode958. 二叉树的完全性检验
Leetcode958. 二叉树的完全性检验
题目描述
给定一个二叉树,确定它是否是一个完全二叉树。
百度百科中对完全二叉树的定义如下:
若设二叉树的深度为 h,除第 h 层外,其它各层 () 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 个节点。)
示例 1:
1 | 输入:[1,2,3,4,5,6] |
示例 2:
1 | 输入:[1,2,3,4,5,null,7] |
提示:
- 树中将会有 1 到 100 个结点。
解题思路
关于完全二叉树的定义还是比较熟悉的,但是乍一看到这道题有点懵。官方题解的方法是重新同一个code
变量给每一个结点标记,规则为:父节点为i
的话,左孩子为2i
,右孩子为2i+1
。其实的根节点标记为1
。最后看最右端结点的code
值是不是结点的数量。这个方法当然是可行的,但是有点繁琐。
有一个更加巧妙的方法。完全二叉树如果用广度优先搜索的方法,也就是层序遍历的话,当出现一个空节点的时候,后续就不能再出现非空结点。反过来说,如果在层序遍历的过程中,在出现空节点后又出现了非空结点,那么这个二叉树一定不是完全二叉树。
据此可以写出对应的代码:
1 | bool isCompleteTree(TreeNode* root) |
时间复杂度为:,为二叉树的结点个数
空间复杂度为:,为二叉树的结点个数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二进制的叮当喵!