参考: 这是我在微软SDE面试的第三轮被问到的问题,而且这不是一道作业问题。我思考了一下,下面提供了我的方法。
问题: 修改一个二叉搜索树,使其尽可能平衡。毋庸置疑,您应该尽可能高效地完成它。
提示:
面试官说这是一个逻辑问题,如果您有不同的想法,就会得到答案。没有涉及复杂的编码。
--> 话虽如此,我认为他并不希望我指向AVL/RB树。
我的解决方法: 我提出,我会对树进行中序遍历,将中间元素作为新树(称为新根)的根。然后进入中间元素的左部分,将其中间元素作为新根左子树的根。右部分也是如此。 递归地执行此操作将得到最优平衡的BST。
为什么我在这里发布它: 但他对答案不满意:(那么,是否真的有办法在不使用重量/ RB着色策略的情况下完成此操作,还是他只是在戏弄我? 请发表您的专业见解。
重复?没有! 我知道有这个问题,但请求者提出的解决方案太复杂了,而另一个则谈到了AVL树。