二叉树采用二叉链表形式存储,编写一个算法判断给定二叉树是否是完全二叉树
时间: 2024-08-26 09:01:25 浏览: 54
完全二叉树是一种特殊的二叉树,其中除了最后一层外,每一层都尽可能多地填充节点,并且所有叶子节点都在最左侧。对于这种数据结构,我们可以使用递归的方式来判断:
1. 首先,检查根节点是否存在。如果不存在,那么这棵树就是空树,满足完全二叉树的条件。
2. 如果根节点存在,我们需要分别检查两个子树是否也是完全二叉树:
a. 对左子树递归应用完全二叉树的判断规则。
b. 检查左子树的最后一层是否恰好填满,如果没有,那么整棵树不是完全二叉树,因为完全二叉树的最后一层要么为空要么完全填满。
c. 如果左子树是完全二叉树,接着对右子树进行同样的操作。
d. 右子树也需满足上述条件。
递归结束的条件是当前子树为空。如果整个过程都能通过所有的检查,那么原始二叉树就是一个完全二叉树。
这里是一个简单的Python代码示例来实现这个算法:
```python
def isCompleteTree(root):
if not root:
return True
left_height = height(root.left)
right_height = height(root.right)
# 左子树的高度小于等于右子树的高度
# 并且左子树的高度比非空节点数少1
# 即它是最底层并已完全填充
return (not root.left or left_height == right_height) and left_height + 1 == right_height
def height(node):
if not node:
return 0
return 1 + max(height(node.left), height(node.right))
# 使用时,传入二叉树的根节点调用isCompleteTree函数
```
阅读全文