import java.util.LinkedList; import java.util.Queue; /********************************************************** * 非遞歸方法,基本是層次遍歷二叉樹 依次檢查每個節點: * 1.當發現有一個節點的左子樹爲空,右子樹不爲空時 直接返回false. * 2.當發現有一個節點的左子樹不爲空,右子樹爲空時,置標誌位爲1。 * 3.當發現有一個節點的左右子樹均爲空時,置標誌位爲1。 **********************************************************/ public class CompleteBinaryTree { //檢查一棵樹是否是徹底二叉樹 public boolean checking(TreeNode root) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); boolean flag = false; // 葉子結點 TreeNode left; TreeNode right; queue.add(root); while (!queue.isEmpty()) { root = queue.poll(); left = root.left; right = root.right; if ((flag && (left != null || right != null)) || (left == null && right != null)) { // 若是以前層遍歷的結點沒有右孩子,且當前的結點有左或右孩子,直接返回false // 若是當前結點有右孩子卻沒有左孩子,直接返回false return false; } if (left != null) queue.offer(root.left); if (right != null)queue.offer(root.right); else flag = true; // 若是當前結點沒有右孩子,那麼以後層遍歷到的結點必須爲葉子結點 } return true; } }