一:前提
是在此篇博客的基础上进行的:用队列实现二叉树的层序遍历-CSDN博客
二:思路
1:完全二叉树和非完全二叉树的区别在于->非空节点是连续的,就是完全二叉树、非空节点是不连续的,就不是完全二叉树。意思就是,完全二叉树不可能在节点中穿插一个NULL节点。
2:所以当我们队列中出到NULL节点的时候,此时队列中剩下的节点,应该全都是NULL,不可能有一个非空,但凡有一个非空,那一定不是完全二叉树
非完全二叉树:
出到NULL后,剩余的节点有非空
完全二叉树:
出到NULL后,层序后:
Q1:为什么能确保出到空的时候,此时队列里面的节点个数能够反映是否为完全二叉树呢?
因为空节点前的节点的下一层已经被带入到队列中,不可能存在:在下一层中被带入的节点之后才会有非空,因为这个不可能的非空只能在空节点的孩子中才能逃脱检测,但是这不可能
3:验证:将队列剩余的节点遍历
三:代码
四:函数的检测:
非完全二叉树,函数返回false即0
完全二叉树,函数返回true即1.