In computer science, a scapegoat tree is a self-balancing binary search tree, invented by Arne Andersson in 1989 and again by Igal Galperin and Ronald L. Rivest in 1993. It provides worst-case O ( log n ) {\displaystyle {\color {Blue}O(\log n)}} lookup time (with n {\displaystyle n} as the number of entries) and O ( log n ) {\displaystyle O(\log n)} amortized insertion and deletion time.
Unlike most other self-balancing binary search trees which also provide worst case O ( log n ) {\displaystyle O(\log n)} lookup time, scapegoat trees have no additional per-node memory overhead compared to a regular binary search tree: besides key and value, a node stores only two pointers to the child nodes. This makes scapegoat trees easier to implement and, due to data structure alignment, can reduce node overhead by up to one-third.
Instead of the small incremental rebalancing operations used by most balanced tree algorithms, scapegoat trees rarely but expensively choose a "scapegoat" and completely rebuilds the subtree rooted at the scapegoat into a complete binary tree. Thus, scapegoat trees have O ( n ) {\displaystyle O(n)} worst-case update performance.