在 AVL 树中查找节点的高度以计算平衡因子

Finding Height of a node in an AVL Tree for Balance Factor calculation

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

来实现的

Height of the left subtree(LST) - Height of the right subtree(RST) is in the range [-1, 0, 1]

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

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

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

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

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

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

By this definition, height of leaf is 0.

这是正确的。

BUT if height is starting with zero, I can have the following AVL trees too, right?

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

所以应该是:

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

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

The height of a node is the length of the longest downward path to a leaf from that node. [...] The root node has depth zero, leaf nodes have height zero, and a tree with only a single node (hence both a root and leaf) has depth and height zero. Conventionally, an empty tree (tree with no nodes, if such are allowed) has height −1.

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