修改二进制搜索树进行排序?

时间:2012-07-13 12:51:23

标签: tree complexity-theory sorting binary-search-tree

我必须对数组进行排序。除了已经存在的排序类型之外,我想知道这样的算法是否会成功,以及它的复杂性可能是什么。

我有一个要排序的数组。我创建了一个二叉搜索树。

因此,如果我将数组的所有元素插入到BST中,然后在对树进行有序遍历时逐个将它们分配回数组,我将实现排序结果。 (虽然由于树节点而消耗更多的空间复杂性。不是就地排序。)

int i=0;

void sort_by_inorder(node *n)
{
    if(n==NULL)
    {
        return;
    }
    sort_by_inorder(n->leftchild);
    array[i++]=n->data;
    sort_by_inorder(n->rightchild);
}

我知道BST不允许重复插入,因此我们可以考虑将BST插入算法修改为左侧子树的< =或者右侧子树可以> =。

这是一个很好的实现(可行)吗?会有什么复杂性?

遍历复杂性平均为O(n)。插入只是O(log n)。因此,据我所知,这应该是一种有效的算法。

感谢。

1 个答案:

答案 0 :(得分:0)

在一般的二叉搜索树中,插入时间实际上是最坏情况下的O(n)。操作的平衡树需要为O(log(n))。

因此,在一般的BST中,您的方法允许您在O(n ^ 2)中进行排序。