Input: [1,2,3,4,5,6]
Output: true
Explanation: Every level before the last is full (ie. levels
with node-values {1} and {2, 3}), and all nodes in the last
level ({4, 5, 6}) are as far left as possible.Input: [1,2,3,4,5,null,7]
Output: false
Explanation: The node with value 7 isn't as far left as possible.class Solution {
public boolean isCompleteTree(TreeNode root) {
Deque<TreeNode> queue = new LinkedList<>();
queue.offerLast(root);
boolean seenNull = false;
while (! queue.isEmpty()) {
TreeNode currNode = queue.pollFirst();
if (currNode == null) {
seenNull = true;
continue;
} else if (seenNull) {
return false;
}
queue.offerLast(currNode.left);
queue.offerLast(currNode.right);
}
return true;
}
}class Solution {
private class Ret {
boolean isFull;
int height;
public Ret(int height, boolean isFull) {
this.isFull = isFull;
this.height = height;
}
}
public boolean isCompleteTree(TreeNode root) {
Ret ret = helper(root);
if (ret == null) return false;
else return true;
}
private Ret helper(TreeNode root) {
if (root == null) return new Ret(0, true);
Ret l = helper(root.left);
Ret r = helper(root.right);
if (l == null || r == null) return null;
if (l.height < r.height) return null;
if (! l.isFull && l.height == r.height) return null;
if (! l.isFull && ! r.isFull) return null;
if (l.height > r.height + 1) return null;
return new Ret(l.height + 1, l.isFull && r.isFull && l.height == r.height);
}
}