是否完全二叉樹,實現過程如下所示:
package cn.edu.nwu.structs.tree;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author jcm
*
*時間 2016年9月3日
*/
public class IsCompeteBinaryTree {
public static void main(String[] args) {
BinaryTreeNode root = CreateBinaryTree.createBinaryTree();
boolean result = isCompeteBinaryTree(root);
System.out.println(result);
}
public static boolean isCompeteBinaryTree(BinaryTreeNode root){
if(root == null){
return false;
}
Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
queue.add(root);
boolean mustHaveChild = false;
boolean result = true;//結果
while(!queue.isEmpty()){
BinaryTreeNode currentTNode = queue.peek();//頭結點
queue.poll();
if(mustHaveChild){
if(currentTNode.leftTreeNode != null || currentTNode.rightTreeNode != null){
result = false;
break;
}
}else{
if(currentTNode.leftTreeNode != null && currentTNode.rightTreeNode != null){
queue.add(currentTNode.leftTreeNode);
queue.add(currentTNode.rightTreeNode);
}else if(currentTNode.leftTreeNode != null && currentTNode.rightTreeNode == null){
mustHaveChild = true;
queue.add(currentTNode.leftTreeNode);
}else if(currentTNode.leftTreeNode == null && currentTNode.rightTreeNode != null){
result = false;
break;
}else{
mustHaveChild = true;
}
}
}
return result;
}
}