以下哪些是 avl 树?

问题描述

diagram related to the question

在附图中有两个二叉搜索树。当我看到这个问题时,我认为第一棵树是不平衡的,所以它不是一棵 avl 树,而第二棵树是平衡的,它显然是一棵 avl 树。

但是这里的问题是当我看到这个问题的答案时,它给出了 (i) 和 (ii) 都是 avl 树。为什么 (i) 是一棵明显不平衡的 avl 树?

解决方法

简答

是的,如果空树的高度定义为 0,则这两棵树都可以被视为 AVL 树。

长答案

让我们从 here 中获取 AVL 树的定义:

一个平衡的二叉搜索树,其中一个节点的两个子树(子节点)的高度最多相差一个

现在,一棵树的高度是多少?它是从根到叶子的最长路径上的许多边。

让我们从您的示例 13 中选取一个有问题的节点 i。它的右子树是空的,它的左子树由一行 2 节点 - 1011 组成:

               ...
                13
               /
             11 (height = 1)
            /
           10 (height = 0) 
              ...

所以,左子树的高度是1(从它的根1110的最长路径显然是1),而右子树的高度可以被视为0(请参阅更多here)。因此,高度的绝对差为1

我相信你很明显,对于树 i 中的任何其他节点,子树高度的绝对差都不大于 1,因此该树是一棵 AVL 树。>

备注

然而,正如@templatetypedef 所指出的,如果将空子树的高度定义为 -1,则该树不再是 AVL 树,因为 13 处的平衡因子为 {{ 1}}。因此,这完全取决于如何定义空树的高度。更糟糕的是,没有定义空树的高度 - 请检查 here

,

你是对的,树 2 不是 AVL 树。根的右子树 - 以 13 为根的那个 - 是不平衡的。具体来说,它的左子树(以 11 为根的那个)的高度为 1,其(缺失的)右子树的高度为 -1,高度不平衡为 2。

这个问题的来源是什么?也许这是一个错字,或者这棵树可能不是我们想要的树?