Technically, having a Children property in the parent class, and a Parent property in the child class, is much easier than having only a tree-relationship between your objects. Of course, you could try to implement your own version of
Tree (Data structure)[
^], but by adding just one property you can easily hide all this complexity.
And I would not give the Book class a Path property. I would give it a Title, for sure, but retrieving a path is not the responsibility of the Book class; it would better be a method
string GetPath(Book book)
in a LibraryCollection class containing an ObservableCollection of Library objects, as per the requirement you defined.