如何在从排序数组构造BST之后测试它是否平衡

时间:2013-09-19 03:30:55

标签: algorithm testing data-structures tree

我已经从排序数组创建了一个Balanced BST,我的问题是如何测试它。简单地测试一下树是否平衡也无济于事,因为即使是二叉树(注意 - 提到的二叉树,而不是BST)也可以平衡。测试树是否是BST也是不可靠的。我现在只回答,是检查它是balanced' && bst`。现在这是一个复杂的两步测试过程。任何简单/更智能的解决方案?

2 个答案:

答案 0 :(得分:1)

如果它是平衡的,它的深度最多为log(n)+1,其中n是树/数组中的节点数。

检查树是否确实是BST可以通过“按顺序”遍历节点并确保它们确实按顺序完成。

顺便说一句,如果你有一个排序数组,有一个非常简单的方法来构建一个平衡的BST,你运行的方式与二进制搜索相同 - 只有“插入”并应用“双方” “搜索。例如,假设你有:

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

首先插入5,然后插入37,然后插入其余内容。

答案 1 :(得分:0)

回答你的问题:

你可以阅读一个非常good article,特别是关于BST和Sorted数组之间的关系。

仍然简单地回答一下,BST可以显示所有类型的麻烦,如果你不选择明智地构建它,如果阵列没有排序,那么平衡BST的最佳保证是它是随机构建的。观看Eric Domaine(Randomly built BSTs

的视频

既然你已经从排序数组中建立了一个BST,那么在alfasin [深度最多是log(n)+ 1]中建议的是一个很好的检查......但是我想不同意,因为当你说话时关于最大深度,就像检查每个节点并将其存储到某个空间一样,因为你不会知道最深的节点,所以当你有一棵巨大的树时我觉得很难。

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

让程序在堆栈中完成所有计算值的存储。