BST树到AVL

时间:2015-11-30 16:56:10

标签: c tree binary-search-tree avl-tree

我想知道如果BST的每个节点都是如此,我怎样才能将BST转换为O(nlogn)时间的avl:

struct node{
    int leftHeight;
    int rightHeight;
    struct node* lr;
    struct node* rc;
}

我是否必须访问bst的每个节点以检查余额是否不同于0,1,-1?如果是这样,我必须检查它是右或左孩子,以便我分别进行左或右旋转?我怎么做?

我用C. 请不要判断我是初学者。

1 个答案:

答案 0 :(得分:0)

所以你有一个二进制搜索树,你想将它转换为平衡搜索树(AVL树),并想知道是否可以在O(n.log(n))中完成。

在快速研究之后,一般的方法是在构建树时保持树的平衡。另一种方法是创建一个平衡的新树(使用AVL算法)。

要在就地平衡树,您可以使用我在另一个Stack Overflow问题Stout-Warren algorithm中找到的引用Balancing a binary search tree

引用的文章指出其程序在线性时间内工作,即O(n)小于O(n.log(n))。