对于是否是一颗完全二叉树,可以采用队列来判断,采用类似于层序遍历的方法(不同点是其左右孩子为null时,依旧入队)。
首先,来看看一个非完全二叉树的入队以及出队的顺序:
再来看看完全二叉树,其入队以及出队的顺序应该如下:
对比上面两图可以看出,当为一颗完全二叉树的时候,当出队列的一个节点为null,其后面所有出队列的节点全为null。
实现如下:
public static boolean IsCompTree(Node node){ boolean result = true; if(node == null) return result; Queue<Node> queue = new LinkedList<>(); //插入根节点 queue.offer(node); Node poll = null; while (!queue.isEmpty()){ poll = queue.poll(); if (poll == null) break; //为了后面进一步判断, // 节点不为null,则继续入队列 queue.offer(poll.left); queue.offer(poll.right); } while (!queue.isEmpty()){ if(queue.poll() != null) result = false; break; } return result; }