# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCompleteTree(self, root: Optional[TreeNode]) -> bool:
q = deque([root])
while q:
node = q.popleft()
if node:
q.append(node.left)
q.append(node.right)
else:
while q:
if q.popleft():
return False
return True# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCompleteTree(self, root: Optional[TreeNode]) -> bool:
q = deque([root])
nullSeen = False
while q:
node = q.popleft()
if node:
if nullSeen:
return False
q.append(node.left)
q.append(node.right)
else:
nullSeen = True
return True# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCompleteTree(self, root: Optional[TreeNode]) -> bool:
def dfs(node, index, n):
if not node:
return True
if index >= n:
return False
left = dfs(node.left, 2 * index + 1, n)
right = dfs(node.right, 2 * index + 2, n)
return left and right
def countNodes(node):
if not node:
return 0
return 1 + countNodes(node.left) + countNodes(node.right)
n = countNodes(root)
return dfs(root, 0, n)# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCompleteTree(self, root: Optional[TreeNode]) -> bool:
treeHgt = 0
nullSeen = False
def dfs(node, hgt):
nonlocal treeHgt, nullSeen
if not node:
if treeHgt == 0:
treeHgt = hgt
elif hgt == treeHgt - 1:
nullSeen = True
elif hgt != treeHgt:
return False
return not (hgt == treeHgt and nullSeen)
return dfs(node.left, hgt + 1) and dfs(node.right, hgt + 1)
return dfs(root, 0)