【问题标题】:Finding Height of a node in an AVL Tree for Balance Factor calculation查找 AVL 树中节点的高度以计算平衡因子
【发布时间】:2022-01-14 01:23:08
【问题描述】:

AVL 树是平衡的二叉搜索树,即高度 = O(log(n))。这是通过确保每个节点都遵循 AVL 树属性来实现的:

左子树的高度(LST) - 右子树的高度(RST)是 在 [-1, 0, 1] 范围内

其中高度(LST) - 高度(RST) 称为给定节点的平衡因子(BF)。

节点的高度通常定义为“从该节点到最深节点的路径长度(#edges)” 例如:

根据这个定义,叶子的高度为 0。 但几乎每次讨论 AVL 树时,人们都认为 叶子的高度为 1

我的问题是,我们可以把叶子的高度设为 0 吗?这将使以下 BST 也成为 AVL 树,对吗?

由于这些文章,高度概念让我感到困惑:

首先,它们从 0 开始高度。 然后他们说,高度为 2 的 avl 树为 4 所需的最小节点数但是如果高度从零开始,我也可以拥有以下 AVL 树,对吗?

【问题讨论】:

    标签: data-structures tree binary-search-tree avl-tree


    【解决方案1】:

    根据这个定义,叶子的高度是0。

    这是正确的。

    但是如果高度从零开始,我也可以拥有以下 AVL 树,对吗?

    不,叶子的父节点的高度为 1,因为从该节点到叶子的路径有 1 条边。

    应该是这样的:

                  O  -- height 2, balance factor 2
                 /
                O  -- height 1, balance factor 1
               /
              O  -- height 0
    

    根的平衡因子是 2,因为它的左子树的高度是 1,它的右子树的高度是 -1(!)。请注意,如果单个节点的高度为 0,则空树的高度为 -1。这也是Wikipedia中提到的:

    节点的高度是从该节点到叶子的最长向下路径的长度。 [...] 根节点的深度为零,叶节点的高度为零,只有一个节点的树(因此根节点和叶节点)的深度和高度为零。按照惯例,一棵空树(没有节点的树,如果允许的话)的高度为 -1。

    因此这些不是有效的 AVL 树:它们需要重新平衡。

    【讨论】:

    • 我同意你写的高度是正确的,但是由于 BF(平衡因子) = H(LST) - H(RST),根的 BF 不应该是 H(LST) - H (RST) = 1 - 0 = 1?
    • 不,应该是 1 - (-1) = 2。请参阅答案的补充。
    • 好的,所以一棵空树的高度是-1。这就是我困惑的地方!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多