完全二叉树是一种特殊的二叉树,具有以下特点:
1. 每个节点的子节点都存在且唯一。对于任意一个节点,如果其层数为i(根节点为第1层),则其左子节点位于第i+1层,右子节点位于第i+1层或第i+2层。
2. 最后一层的叶子节点从左到右依次排列,中间没有空缺。也就是说,如果最后一层的节点没有填满,则只有在最右边可能缺少节点。
3. 对于除最后一层之外的其他层,节点都是满的,即每一层的节点数达到了最大值。如果完全二叉树的深度为h,则除最后一层外,其他各层的节点数为2^(h-1)。
4. 完全二叉树可以使用数组表示。对于具有n个节点的完全二叉树,可以使用长度为n的数组来存储节点的值,具体存储规则如下:
- 根节点存储在数组下标为0的位置;
- 对于任意一个下标为i的节点,其左子节点的下标为2i+1,右子节点的下标为2i+2;
- 对于任意一个下标为i的节点,其父节点的下标为(i-1)/2。
下面是一个简单的示例代码,用于判断一个二叉树是否是完全二叉树:
- class TreeNode:
- def __init__(self, val):
- self.val = val
- self.left = None
- self.right = None
- def is_complete_binary_tree(root):
- if not root:
- return True
-
- queue = [root]
- flag = False # 标记是否遇到了空节点
- while queue:
- node = queue.pop(0)
-
- if node:
- # 如果遇到了空节点,后面的节点不能有非空节点
- if flag:
- return False
-
- queue.append(node.left)
- queue.append(node.right)
- else:
- flag = True
-
- return True
复制代码
希望以上信息能对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。