Algorithm 如何测试从排序数组构造的BST是否平衡
我已经从一个排序数组创建了一个平衡的BST,我的问题是如何测试它。简单地测试一棵树是否平衡是没有帮助的,因为即使是一棵二叉树(注意提到的二叉树,不是BST)也可以平衡。测试树是否为BST也不是enof。我现在得到的唯一答案是检查它是否平衡&&bst`。这是一个复杂的两步测试过程。任何简单/智能的解决方案?如果它是平衡的,那么它的深度将最多为log(n)+1,其中n是树/阵列中的节点数 检查树是否确实是BST,只需“按顺序”遍历节点并确保它们确实按顺序进行即可 顺便说一句,如果你有一个排序数组,有一种非常简单的方法可以用它来构建一个平衡的BST,你可以用与二进制搜索相同的方法来运行-只需要“插入”和应用搜索的“两面”。例如,假设您有:Algorithm 如何测试从排序数组构造的BST是否平衡,algorithm,testing,data-structures,tree,Algorithm,Testing,Data Structures,Tree,我已经从一个排序数组创建了一个平衡的BST,我的问题是如何测试它。简单地测试一棵树是否平衡是没有帮助的,因为即使是一棵二叉树(注意提到的二叉树,不是BST)也可以平衡。测试树是否为BST也不是enof。我现在得到的唯一答案是检查它是否平衡&&bst`。这是一个复杂的两步测试过程。任何简单/智能的解决方案?如果它是平衡的,那么它的深度将最多为log(n)+1,其中n是树/阵列中的节点数 检查树是否确实是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)更短的技术您也可以检查高度-无需进行两次遍历。