满二叉树: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 2 k − 1 2^k-1 2k−1 ,则它就是满二叉树。
完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
public boolean isCompleteTree(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (true) {
TreeNode remove = queue.remove();
if (remove == null) {
break;
}
queue.add(root.left);
queue.add(root.right);
}
for (TreeNode node : queue) {
if (node != null) {
return false;
}
}
return true;
}
将二叉树层序遍历放在队列中,遇到null之后的所有节点都是null,则是完全二叉树;遇到null之后,还有不是null的则是不完全二叉树。