判断是否是完全二叉树
https://leetcode.com/problems/check-completeness-of-a-binary-tree/
我的解法:
使用队列,当遇到存在孩子节点为null的时候,置标记位为true,队列里的节点的孩子节点都应该为null
public boolean isCompleteTree(TreeNode root) {
if (root == null) return true;
Queue<TreeNode> q = new ArrayDeque<>();
q.add(root);
boolean f = false;
while (!q.isEmpty()) {
TreeNode poll = q.poll();
if (poll.left != null) {
if (f) return false;
q.add(poll.left);
} else {
f = true;
}
if (poll.right != null) {
if (f) return false;
q.add(poll.right);
} else {
f = true;
}
}
return true;
}
别人的解法:
对于一个完全二叉树,空节点后不应该再有节点,和我的思路差不多,但是实现看起来比较简洁。
public boolean isCompleteTree(TreeNode root) {
Queue<TreeNode> bfs = new LinkedList<TreeNode>();
bfs.offer(root);
while (bfs.peek() != null) {
TreeNode node = bfs.poll();
bfs.offer(node.left);
bfs.offer(node.right);
}
while (!bfs.isEmpty() && bfs.peek() == null)
bfs.poll();
return bfs.isEmpty();
}