📜  检查BST的每个内部节点是否恰好有一个子节点(1)

📅  最后修改于: 2023-12-03 15:26:44.134000             🧑  作者: Mango

检查BST的每个内部节点是否恰好有一个子节点

本文将介绍如何检查二叉搜索树(BST)的每个内部节点是否恰好有一个子节点,同时提供示例代码和详细说明。

什么是二叉搜索树?

二叉搜索树(Binary Search Tree)是一种常见的数据结构,它是一棵二叉树,每个节点都包含一个键值,且满足以下性质:

  • 左子树中所有键值都小于当前节点的键值
  • 右子树中所有键值都大于当前节点的键值
  • 左右子树都是二叉搜索树
如何检查BST的每个内部节点是否恰好有一个子节点?

要检查BST的每个内部节点是否恰好有一个子节点,我们需要遍历树的每个节点,并判断其子节点数量。

在二叉搜索树中,如果一个内部节点(即不是叶子节点)有且仅有一个子节点,它一定是其左子节点或右子节点。

因此,遍历每个节点,如果该节点是内部节点,且其子节点数量不等于1,则该树不符合要求。

以下是示例代码:

class Node:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.key = key
        
def is_perfect(node):
    if node is None:
        return True
    if node.left is None and node.right is None:
        return True
    if node.left is not None and node.right is not None:
        return is_perfect(node.left) and is_perfect(node.right)
    return False

该代码中,我们定义了一个Node类,包含左子节点、右子节点和键值。

is_perfect函数遍历每个节点,如果该节点是叶子节点,则返回True。

如果该节点有两个子节点,则继续遍历该节点的左右子树。

如果节点只有一个子节点,则返回False。

这段代码的时间复杂度为$O(n)$,其中$n$是节点数。

总结

二叉搜索树是一种常见的数据结构,具有快速查找、插入和删除等优点。

要检查BST的每个内部节点是否恰好有一个子节点,我们需要遍历树的每个节点,并判断其子节点数量。

以上是简单的介绍和示例代码,如果发现任何问题或有更好的实现方法,请随时与我们分享。