![](/img/trans.png)
[英]How can I find the number of nodes that are smaller or equal to a given value in BST? (AVL TREE)
[英]BST tree to AVL
我想知道如何在BST的每个节点为O(nlogn)的时间内将BST转换为avl:
struct node{
int leftHeight;
int rightHeight;
struct node* lr;
struct node* rc;
}
我是否必须访问bst的每个节点以检查余额是否不同于0,1,-1? 如果是这样,我必须检查它是一个右孩子还是一个左孩子,以便我分别执行左旋转或右旋转? 我怎么做?
我正在使用C。请不要判断我我是一个初学者。
因此,您有一个二叉搜索树,您想将其转换为平衡搜索树(AVL树),想知道是否可以在O(n.log(n))中完成。
经过快速研究后,一般的方法是在构建树时保持树的平衡。 另一种方法是创建一个平衡的新树(使用AVL算法)。
要就地平衡树,可以使用Stout-Warren算法 ,该算法是我在另一个Stack Overflow问题中找到的参考,即平衡二分搜索树 。
引用的文章指出其过程在线性时间内工作,即O(n)小于O(n.log(n))。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.