我已经从排序数组创建了一个Balanced BST,我的问题是如何测试它。简单地测试一下树是否平衡也无济于事,因为即使是二叉树(注意 - 提到的二叉树,而不是BST)也可以平衡。测试树是否是BST也是不可靠的。我现在只回答,是检查它是balanced' &&
bst`。现在这是一个复杂的两步测试过程。任何简单/更智能的解决方案?
答案 0 :(得分:1)
如果它是平衡的,它的深度最多为log(n)+1,其中n是树/数组中的节点数。
检查树是否确实是BST可以通过“按顺序”遍历节点并确保它们确实按顺序完成。
顺便说一句,如果你有一个排序数组,有一个非常简单的方法来构建一个平衡的BST,你运行的方式与二进制搜索相同 - 只有“插入”并应用“双方” “搜索。例如,假设你有:
1,2,3,4,5,6,7,8,9
首先插入5
,然后插入3
和7
,然后插入其余内容。
答案 1 :(得分:0)
回答你的问题:
你可以阅读一个非常good article,特别是关于BST和Sorted数组之间的关系。
仍然简单地回答一下,BST可以显示所有类型的麻烦,如果你不选择明智地构建它,如果阵列没有排序,那么平衡BST的最佳保证是它是随机构建的。观看Eric Domaine(Randomly built BSTs)
的视频既然你已经从排序数组中建立了一个BST,那么在alfasin [深度最多是log(n)+ 1]中建议的是一个很好的检查......但是我想不同意,因为当你说话时关于最大深度,就像检查每个节点并将其存储到某个空间一样,因为你不会知道最深的节点,所以当你有一棵巨大的树时我觉得很难。
我建议找到根的高度。如果根的高度是log(n)+ 1,则它是平衡的。
让程序在堆栈中完成所有计算值的存储。