【题目】
判断一棵树是否为完全二叉树。
【分析】
1、按层遍历二叉树,从每层的左边向右边依次遍历所有的节点
2、如果当前结点有右节点,但没有左节点,直接返回false
3、如果当前节点并不是左右两个节点全有,那么之后的节点都必须为叶节点,否则返回false
【代码】
package zyc.binaryTree;import java.util.LinkedList;
import java.util.Queue;public class P151_CBT {/*** 是否完全二叉树** @param node* @return*/public static boolean isCbt(Node node) {if (null == node) {return true;}Queue<Node> queue = new LinkedList<Node>();queue.add(node);boolean allLeaf = false;while (!queue.isEmpty()) {Node cur = queue.poll();if ((cur.left == null && cur.right != null) || (allLeaf && cur.left != null)) {return false;}if (cur.left != null) {queue.add(cur.left);}if (cur.right != null) {queue.add(cur.right);} else {allLeaf = true;}}return true;}public static void main(String[] args) {Node node = new Node(1);node.left = new Node(2);node.left.left = new Node(1);node.left.right = new Node(1);node.right = new Node(1);node.right.left = new Node(1);node.right.right = new Node(1);node.left.left.right = new Node(1);boolean cbt = isCbt(node);System.out.println(cbt);}public static class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;}}}