Why is a Tree a concrete data structure and not abstract?
An abstract data type (ADT) is an interface: it describes the operations that can be performed and what their externally visible behavior should be.  There are typically many possible ways to implement that interface.

A data structure is an implementation of such an interface: it provides code or fully specifies the internal behavior.

A binary search tree is not an ADT; it specifies more than a list of supported operations (like insert, find) but also how they can be implemented (by a particular data structure in the shape of a tree).  A heap is not an ADT; it specifies more than a list of supported operations (extract-min, insert), but also how those operations should be implemented (by storing the elements in an array in a particular way and manipulating them in a specific fashion).

See also https://en.wikipedia.org/wiki/Abstract_data_type.