Algorithm 如何测试从排序数组构造的BST是否平衡

Algorithm 如何测试从排序数组构造的BST是否平衡,algorithm,testing,data-structures,tree,Algorithm,Testing,Data Structures,Tree,我已经从一个排序数组创建了一个平衡的BST,我的问题是如何测试它。简单地测试一棵树是否平衡是没有帮助的,因为即使是一棵二叉树(注意提到的二叉树,不是BST)也可以平衡。测试树是否为BST也不是enof。我现在得到的唯一答案是检查它是否平衡&&bst`。这是一个复杂的两步测试过程。任何简单/智能的解决方案?如果它是平衡的,那么它的深度将最多为log(n)+1,其中n是树/阵列中的节点数 检查树是否确实是BST,只需“按顺序”遍历节点并确保它们确实按顺序进行即可 顺便说一句,如果你有一个排序数组,有

我已经从一个排序数组创建了一个平衡的BST,我的问题是如何测试它。简单地测试一棵树是否平衡是没有帮助的,因为即使是一棵二叉树(注意提到的二叉树,不是BST)也可以平衡。测试树是否为BST也不是enof。我现在得到的唯一答案是检查它是否平衡&&bst`。这是一个复杂的两步测试过程。任何简单/智能的解决方案?

如果它是平衡的,那么它的深度将最多为log(n)+1,其中n是树/阵列中的节点数

检查树是否确实是BST,只需“按顺序”遍历节点并确保它们确实按顺序进行即可

顺便说一句,如果你有一个排序数组,有一种非常简单的方法可以用它来构建一个平衡的BST,你可以用与二进制搜索相同的方法来运行-只需要“插入”和应用搜索的“两面”。例如,假设您有:

1,2,3,4,5,6,7,8,9

首先插入
5
,然后插入
3
7
,然后插入其余部分。

回答您的问题:

有一个非常有趣的例子,你们可以读到,它是关于BST和排序数组之间的关系的

简单地说,BST可以显示各种各样的干扰,如果您不明智地构建它,如果阵列没有排序,那么平衡BST的最佳保证就是随机构建。观看Eric Domaine()的视频

既然您已经用排序数组构建了BST,那么alfasin[depth is most log(n)+1]中建议的是一个很好的检查。。。但我不同意,因为当你谈论最大深度时,就像检查每个节点并将其存储到某个空间中,因为你不知道最深的节点,所以当你有一棵大树时,我发现这很困难

我建议找出树根的高度。如果根的高度为log(n)+1,则它是平衡的


让程序在堆栈中存储所有计算值

您想测试什么属性?节点是否已排序?当你说“测试是否平衡”,那么这个测试应该只检查平衡性——这是非常好的。事实上,一个BST可能需要完成多个不同的测试(这并不复杂,只是一个
&
连接),但问题是,当您“按顺序”遍历时,有没有比执行
测试
比执行两个不同的检查(一个检查BST,另一个检查二进制?@JavaDeveloper)更短的技术您也可以检查高度-无需进行两次遍历。