我正在尝试从提供以下内容的源创建树:要添加到树中的2个节点,以及应添加这2个新闻节点的节点。为了找到这个节点在树中的位置,我使用了一个带有O(n)的inorder遍历。因此,如果在树中添加了n个节点,则整个树的创建将是O(n ^ 2)。我的约束是它应该只用O(n)来创建树。
答案 0 :(得分:11)
查找二叉树中的节点为O(log(n))
,因为树具有log(n)
级别(每个级别保持其上一级的两倍)。因此,要创建/插入n
元素到二叉树中,它是O(nlog(n))
。
答案 1 :(得分:6)
您可以在HashMap [1]中保留对树的每个节点的引用,以获得O(1)
访问每个节点而不是典型树的O(log(n))
。这样就可以在O(n)
时间内构建树,因为HashMap允许您直接跳转到节点而不是从树的根节点遍历那个节点。
[1]密钥将是源用于唯一标识节点的任何内容(我假设它是一个整数或字符串)。该值将是对树中节点的引用。请注意,树实现必须公开其所有节点,因此您可能需要自己编写树或找到合适的库(例如TreeMap的JDK树保持其内部结构为私有,因此它们不会删除它)。
答案 2 :(得分:1)
对于二元搜索树时间复杂度将是O(nlogn),当元素未被排序和排序时,它需要O(n ^ 2)。这是因为要在BST O(n)中对一个排序列表中插入一个元素,因此对于n个元素O(n ^ 2),对于平衡或几乎平衡的二叉搜索树,插入的最大时间是logn,因此对于n个元素是nlogn