题目
给定一个二叉树的root, 确定他是否是一个完全二叉树
答案
两个阶段,
阶段1, 一直遍历, 挑出所有度为2的结点, 直到遇到了第一个缺少子树的结点:
当度为2时,继续利用队列采用层序遍历, 否则
当节点只有左孩子,修改isStep1为false前往阶段2
否则当只有右孩子,则不是完全二叉树,返回false
都不是记得isStep为false
阶段2, 每个结点都必须是叶子结点, 不然就是false
全部循环完毕, 证明是完全二叉树,返回true
class Solution { public boolean isCompleteTree(TreeNode root) { Deque<TreeNode> queue = new LinkedList<>(); queue.offer(root); boolean isStep1 = true; while (!queue.isEmpty()) { TreeNode node = queue.poll(); if (isStep1) { //阶段1,每个节点都要有左右两个子树 //当碰到第一个度为1(只有左孩子)或度为0,转阶段 if (node.left != null && node.right != null) { queue.offer(node.left); queue.offer(node.right); } else if (node.left != null) { //当前节点只有左孩子 queue.offer(node.left); isStep1 = false; } else if (node.right != null) { return false; } else{ isStep1 = false; } } else { //每个节点都只能是叶子结点 if (node.left != null || node.right != null) { return false; } } } return true; } }