完全二叉树是指除了最后一层外,其他层的节点都被完全填满,并且最后一层的节点都靠左对齐的二叉树。下面是完全二叉树的几个特点:
1. 第i层的节点数目最多为2^(i-1)个。这是因为二叉树的每一层从左到右依次编号为1, 2, 3, ...,那么在第i层上,编号最大的节点就是2^i - 1。
2. 深度为k的完全二叉树,它的节点数目最多为2^k - 1个。这是因为深度为k的完全二叉树最多有k层,而每一层的节点数目最多为2^(层数-1),所以总节点数最多为2^k - 1。
3. 对于编号为i(1 <= i <= 节点数目)的节点:
- 如果i = 1,它是根节点;
- 如果i > 1,它的父节点是i/2(整除);
- 如果2i <= 节点数目,它的左子节点是2i;
- 如果2i+1 <= 节点数目,它的右子节点是2i+1。
下面是一个简单的Python代码片段,用于判断一棵二叉树是否是完全二叉树:class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef count_nodes(root): if not root: return 0 return 1 + count_nodes(root.left) + count_nodes(root.right)def is_complete_tree(root): if not root: return True nodes_count = count_nodes(root) queue = [root] while queue: node = queue.pop(0) # 如果当前节点为空,则判断它后面的节点是否都为空 if not node: while queue: if queue.pop(0): return False break queue.append(node.left) queue.append(node.right) return len(queue) == 0 # 示例用法root = TreeNode(1)root.left = TreeNode(2)root.right = TreeNode(3)root.left.left = TreeNode(4)root.left.right = TreeNode(5)print(is_complete_tree(root)) # 输出:True
在该示例中,我们定义了一个`TreeNode`类来创建二叉树节点。`is_complete_tree`函数接收一棵二叉树的根节点,并使用广度优先搜索(BFS)在确认节点是否为空前,遍历整个二叉树。通过比较遍历完成后队列的长度是否为0,可以判断该二叉树是否是完全二叉树。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |