判断一个二叉树是否是完全二叉树
样例
例1:
输入:{1,2,3,4}
输出:true
说明:
1
/ \
2 3
/
4
是完全二叉树。
例2:
输入:{1,2,3,#,4}
输出:false
说明:
1
/ \
2 3
\
4
不是完全二叉树
挑战
在 O(n) 时间里完成
输入测试数据 (每行一个参数)如何理解测试数据?
解题思路:
使用广度优先遍历来解决。如果碰到null,但是待遍历的队列有不为空的元素,那么说明不是完全二叉树。下面方法使用flag来标记。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root of binary tree.
* @return: true if it is a complete binary tree, or false.
*/
public boolean isComplete(TreeNode root) {
// write your code here
if(root == null)
return true;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
//用于标记当前元素是否为空,若为空,则后面元素若有一个不为空则表明不是完全二叉树
boolean flag = false;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node != null){
if(flag)
return false;
queue.offer(node.left);
queue.offer(node.right);
}else{
flag = true;
}
}
return true;
}
}