平衡二叉树支持的节点的查找、删除、插入,由于直接构建二叉树,可能导致树形蜕化成链,因一般要使用Splay、红黑树或AVL树等方法优化,保证树的平衡。由于可以在根节点储存该子树的某些总体函数值,平衡二叉树也支持对某一段数据球最大最小求和等操作。上述这些操作的时间复杂度均为O(logN)
线段树支持对某一个数据段的查找,或修改,因此在更改相应节点函数之后,一般要更新其祖宗节点的对应总体函数值,所以线段树也支持对某一段数据球最大最小求和等操作。时间复杂度也类似为O(logN)
那么,这两种数据结构能否相互代替呢,应该可以看到,线段树是一种相对静态的数据结构,一般应用是需要先进行排序,平衡二叉树是一种相对动态的数据结构,不需要事先排序。一般情况下,两者作用可以相互代替,但平衡树的各种实现方法,都具有较高的编程复杂度,不易调试,因此,我建议使用线段树代替平衡树。
但同时,也用注意到,线段树由于需要事先排序因此一定是一种离线算法,对于一些要求在线钻法的交互式问题则不能胜任,此时要解决问题可能还是需要使用平衡二叉树。
线段树支持对某一个数据段的查找,或修改,因此在更改相应节点函数之后,一般要更新其祖宗节点的对应总体函数值,所以线段树也支持对某一段数据球最大最小求和等操作。时间复杂度也类似为O(logN)
那么,这两种数据结构能否相互代替呢,应该可以看到,线段树是一种相对静态的数据结构,一般应用是需要先进行排序,平衡二叉树是一种相对动态的数据结构,不需要事先排序。一般情况下,两者作用可以相互代替,但平衡树的各种实现方法,都具有较高的编程复杂度,不易调试,因此,我建议使用线段树代替平衡树。
但同时,也用注意到,线段树由于需要事先排序因此一定是一种离线算法,对于一些要求在线钻法的交互式问题则不能胜任,此时要解决问题可能还是需要使用平衡二叉树。