解题思路:
判断完全二叉树
首先每个节点都会有以下4种情况:
情况一:
情况二:
情况三:
情况四:
1:如果当前访问的节点的左右孩子是情况3,说明不是完全二叉树,直接返回false。
2:如果当前访问的节点的左右孩子是情况1,继续访问其他节点。
3:如果当前访问的节点的左右孩子是情况2或者情况4,那么我们定义一个状态(接下来访问的所有节点必须全部是叶子节点)。只要遇到情况2或者情况4,这个状态就开启了。
public boolean isCBT(TreeNode root) {
if (root == null)
return true;
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
boolean leaf = false;
while (!que.isEmpty()) {
TreeNode temp = que.peek();
que.poll();
if ((leaf && (temp.left != null || temp.right != null)) || (temp.left == null && temp.right != null))
return false;
if (temp.left != null)
que.add(temp.left);
if (temp.right != null)
que.add(temp.right);
if ((temp.left != null && temp.right == null) || (temp.left == null && temp.right == null))
leaf = true;
}
return true;
}
参考链接:https://blog.csdn.net/qq_40938077/article/details/80471997