5-1编写一算法,判别给定二叉树是否为完全二叉树。
时间: 2024-03-24 18:35:40 浏览: 88
编写算法判别给定二叉树是否为完全二叉树
以下是判断给定二叉树是否为完全二叉树的算法:
1. 如果二叉树为空,则返回 true。
2. 定义一个队列 Q,将根节点入队。
3. 对于队列中的每个节点,执行以下操作:
- 如果该节点左子树不为空,则左子树入队。
- 如果该节点右子树不为空,则右子树入队。
- 如果该节点左子树为空,但右子树不为空,则该二叉树不是完全二叉树。
- 如果该节点左子树和右子树都为空,则从该节点开始,后面的节点都应该是叶子节点,否则该二叉树不是完全二叉树。
4. 如果队列为空,则该二叉树是完全二叉树,否则不是完全二叉树。
以下是该算法的 Python 代码实现:
```python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def is_complete_tree(root: Node) -> bool:
if not root:
return True
q = [root]
is_leaf = False
while q:
node = q.pop(0)
if node.left:
if is_leaf:
return False
q.append(node.left)
else:
is_leaf = True
if node.right:
if is_leaf:
return False
q.append(node.right)
else:
is_leaf = True
return True
```
该算法的时间复杂度为 $O(n)$,其中 $n$ 为二叉树中的节点数。
阅读全文