TreeSet迭代的时间复杂度是多少?

Joh*_*ith 7 java algorithm treeset data-structures

在我的代码中,Java TreeSet迭代是主要的时间因素.在查看系统时,我认为它是O(n)复杂性.任何人都可以验证吗?

我想通过提供从子节点到父节点的向后链接,我可以提高性能.

Mic*_*rdt 5

TreeSet 迭代当然是 O(n),这可以从任何合理的树行走算法中得到。

我认为通过提供从子节点到父节点的反向链接,我可以提高性能。

TreeMapTreeSet基于)已经有这样的父引用。这就是它所有归结为的方法:

private Entry<K,V> successor(Entry<K,V> t) {
    if (t == null)
        return null;
    else if (t.right != null) {
        Entry<K,V> p = t.right;
        while (p.left != null)
            p = p.left;
        return p;
    } else {
        Entry<K,V> p = t.parent;
        Entry<K,V> ch = t;
        while (p != null && ch == p.right) {
            ch = p;
            p = p.parent;
        }
        return p;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @john:根据定义,O(n)+O(log n) 与 O(n) 相同。 (2认同)
  • @Tom:O(n*log n) 严格大于 O(n),但是对于 n 个叶子,您有 O(n*log n) 个节点是不正确的。对于具有 n 个叶子的二叉树,从倒数第二层有 n/2 个节点,在下一个更高层有 n/4 个节点……这是一个几何级数,加起来为 2n,即 O(n)。 (2认同)