判断一颗树是否是完全二叉树

298 阅读1分钟

图片.png

图片.png

图片.png


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    func isCompleteTree(_ root: TreeNode?) -> Bool {
        guard root != nil else {
            return false 
        }
        var queue = [root!]
        var isCompleted = false 
        while !queue.isEmpty {
            let node = queue.removeFirst()
            if node.left == nil && node.right != nil {
                return false
            }
            if isCompleted && (node.left != nil || node.right != nil) {
                return false
            }
            if node.left == nil || node.right == nil {
                isCompleted = true
            }
            if node.left != nil {
                queue.append(node.left!)
            }
            if node.right != nil {
                queue.append(node.right!)
            }
        }
        return true
    }
}