1. 程式人生 > >二叉樹之完全二叉樹判斷

二叉樹之完全二叉樹判斷

分析:可以按照下面條件進行判斷

 1. 採用按層遍歷的方式,依次遍歷所有結點

 2. 如果當前結點有右孩子沒有左孩子,直接返回false

 3. 如果當前結點有左孩子沒有右孩子,那之後的結點必須為葉子結點,否則返回false

 4. 如果之前步驟不返回false,則返回true;

public class CheckCompletion {
    public boolean chk(TreeNode root) {
        // write code here
        if(root==null){
            return true;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        boolean leaf=false;
        TreeNode left=null;
        TreeNode right=null;
        while(!queue.isEmpty()){
            root=queue.poll();
            left=root.left;
            right=root.right;
               // 如果之前層遍歷的結點沒有右孩子,且當前的結點有左或右孩子,直接返回false
                // 如果當前結點有右孩子卻沒有左孩子,直接返回false
            if(leaf&&(left!=null||right!=null)||(left==null&&right!=null)){
                return false;
            }
            if(left!=null){
                queue.offer(left);
            }
            if(right!=null){
                queue.offer(right);
            }else{
                //左右節點不全有是葉子結點
                leaf=true;
            }
        }
        return true;
        
    }
}