binary-tree-based algorithm