题解 | #判断是不是完全二叉树#
判断是不是完全二叉树
https://www.nowcoder.com/practice/8daa4dff9e36409abba2adbe413d6fae
<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
function isCompleteTree( $root )
{
if($root == null){
return true;
}
$list = [];
$list[] = $root;
while(!empty($list)){
$pop = array_shift($list);
if($pop->left != null && $pop->right != null){
$list[] = $pop->left;
$list[] = $pop->right;
}elseif($pop->left != null && $pop->right == null){
$list[] = $pop->left;
break;
}elseif($pop->left == null && $pop->right != null){
return false;
}else{
break;
}
}
while(!empty($list)){
$pop = array_shift($list);
if($pop->left != null || $pop->right != null){
return false;
}
}
return true;
}
BFS遍历,分为两个阶段:
- 阶段一:判断节点是不是有两个子节点,或者只有左节点。如果是,把子节点放入队列;如果只有右节点,直接返回false;如果两个子节点都没有,或者只有左节点,进入下个阶段
- 阶段二:判断队列里剩下的节点是不是都没有子节点,如果有子节点,返回false
安克创新 Anker公司福利 782人发布
