📅  最后修改于: 2023-12-03 15:28:39.356000             🧑  作者: Mango
本题是 GATE CS Mock 2018 中的第 61 题,题目链接为 https://www.geeksforgeeks.org/gate-cs-mock-2018-set-2-question-61/
本题要求编写一个函数,判断一个二叉树是否为平衡二叉树。平衡二叉树定义为:对于任何一个节点,它的两个子树的高度差不超过 1。
以下为求解本题的基本思路:
根据上述思路,我们可以得到以下基本的算法步骤:
以下为本题的解题代码实现:
class Node:
def __init__(self, value):
self.left = None
self.right = None
self.value = value
def height(node):
if node is None:
return 0
else:
left_height = height(node.left)
right_height = height(node.right)
return max(left_height, right_height) + 1
def is_balanced(node):
if node is None:
return True
else:
left_height = height(node.left)
right_height = height(node.right)
if abs(left_height - right_height) <= 1 and is_balanced(node.left) and is_balanced(node.right):
return True
else:
return False
以上代码中,我们首先定义了一个 Node
类,用于表示一个二叉树的节点。节点中包含左子树、右子树和值这三个属性。
接下来,我们定义了一个 height
函数,用于计算一个节点的高度。如果该节点为空,则高度为 0;否则,高度等于左右子树中高度较大的那棵子树的高度加 1。
最后,我们定义了一个 is_balanced
函数,用于判断一个二叉树是否为平衡二叉树。在该函数中,我们首先计算根节点的左右子树的高度,并判断它们的高度差是否超过 1。如果高度差不超过 1,那么我们递归判断其左右子树是否是平衡二叉树。如果左右子树都是平衡二叉树,那么该二叉树也是平衡二叉树。否则,该二叉树不是平衡二叉树。
本题考察了程序员对于二叉树遍历和递归的理解和应用。通过对二叉树节点的遍历,我们可以逐步计算出每一个节点的高度,从而判断该二叉树是否为平衡二叉树。因此,能够通过本题的程序员需要熟练掌握这两个知识点。