public boolean isCompleteTree() {
//空树是完全二叉树
if (null == root) {
return true;
}
//树非空的情况
Queue<BTNode> q = new LinkedList<>();
q.offer(root);
boolean isLeafOrLeft = false;
while (!q.isEmpty()) {
BTNode cur = q.poll();
if (isLeafOrLeft) {
//2.从第一个不饱和节点之后,所有节点不能有孩子节点
if (null != cur.left || null != cur.right) {
return false;
}
}
else {
//1.按照层序遍历的方式找第一个不饱和节点(叶子,只有一个孩子的节点)
//cur节点的左右孩子均存在
if (null != cur.left && null != cur.right) {
q.offer(cur.left);
q.offer(cur.right);
} else if (null != cur.left) {
//cur只有左孩子
isLeafOrLeft = true;
} else if (null != cur.right) {
//cur只有右孩子
return false;
} else {
//cur是叶子节点
isLeafOrLeft = true;
}
}
}
return true;
}
判断一棵树是不是完全二叉树
最新推荐文章于 2020-07-02 09:14:25 发布