用python设计算法判断完美二叉树并进行代码测试
时间: 2024-05-06 08:21:46 浏览: 11
可以使用如下算法判断二叉树是否为完美二叉树:
1. 首先判断二叉树是否为空树,如果为空则认为它是一棵完美二叉树。
2. 再判断它的左右子树是否为空树。
3. 如果左右子树都为空,则该二叉树只有一个节点,认为它是一棵完美二叉树。
4. 如果左右子树都不为空且左右子树高度相同,那么该二叉树才是一棵完美二叉树。
5. 如果左右子树高度不同,那么该二叉树不是一棵完美二叉树。
下面是实现代码:
```
class Node:
def __init__(self, value=None, left=None, right=None):
self.value = value
self.left = left
self.right = right
def is_perfect_binary_tree(root):
# 如果根节点为空,则认为它是一棵完美二叉树
if not root:
return True
# 如果左子树为空,但右子树不为空,则不是完美二叉树
if not root.left and root.right:
return False
# 如果右子树为空,但左子树不为空,则不是完美二叉树
if root.left and not root.right:
return False
# 如果左右子树都为空,则认为它是一棵完美二叉树
if not root.left and not root.right:
return True
# 如果左右子树高度相同,则继续判断它们是否是完美二叉树
if get_tree_depth(root.left) == get_tree_depth(root.right):
return is_perfect_binary_tree(root.left) and is_perfect_binary_tree(root.right)
# 如果左右子树高度不同,则不是完美二叉树
return False
def get_tree_depth(root):
if not root:
return 0
return max(get_tree_depth(root.left), get_tree_depth(root.right)) + 1
# 测试代码
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
print(is_perfect_binary_tree(root)) # True
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
print(is_perfect_binary_tree(root)) # False
```
在上面代码中,我们用到了一个get_tree_depth方法,该方法用于计算二叉树的深度。这个方法的实现很简单,即递归计算左右子树的深度并取最大值再加1。