如何使用O(1)额外空间将二叉树转换为二叉搜索树?
答案 0 :(得分:7)
将无序二叉树转换为有序二进制搜索树是微不足道的,但快速执行起来有点困难。
这是一个应该满足你的标准的天真实现,我不会描述实际采取的步骤,只是整体算法。
您应该只需要几个变量,例如您要取消链接的叶节点的父节点(除非节点具有父链接),新树的根节点和一些临时变量,所有这些都在您的内部O(1)空间标准。
这不会产生最佳的二叉搜索树。为此,您需要在添加节点之前对节点进行排序,并按正确顺序添加节点,或者使用平衡二叉搜索树,如红黑树或展开树。
答案 1 :(得分:-1)
将二进制树转换为双向链表 - 可以在O(n)中完成 然后使用merge sort,nlogn对其进行排序 将列表转换回树 - O(n)
简单的nlogn解决方案。