first, you could get the relative item position with this:
var myItem = (UIElement)myTreeView.SelectedItem;
var pos1 = myItem.TranslatePoint(new Point(), myTreeView);
var pos2 = myAnyOtherItem.TranslatePoint(new Point(), myTreeView);
if you don't have access to the UIElement look for
"get container from data object (WPF TreeView)"
but this is a other question and I'm sure there is already a solution ^^
second, using an adorner is good idea
but I'm sure there are enough samples ^^