.list-tree,
.list-tree ul,
.list-tree li {
    margin: 0;
    padding: 0;
    line-height: 1;
    list-style: none;
}

.list-tree ul {
    margin: 0 0 0 .5em; /* вести линию вниз где-то с полбуквы родителя */
}

.list-tree > li:not(:only-child),
.list-tree li li {
    position: relative;
    padding: .2em 0 0 1.2em; /* отступ до текста; для раскрывающегося списка в ряде случаев (в Хроме есть баг) padding-top (.2em) лучше указывать в px */
}

.list-tree li:not(:last-child) {
    border-left: 1px solid #ccc; /* толщина, цвет и стиль (вместо сплошной пунктирная или точечная) вертикальной линии */
}

.list-tree li li:before,
.list-tree > li:not(:only-child):before { /* горизонтальная линия */
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 1.1em; /* не более отступа до текста (1.2em) */
    height: .7em; /* начинается приблизительно с половины высоты буквы (.5em + .2em) */
    border-bottom: 1px solid #ccc;
}

.list-tree li:last-child:before { /* вертикальная линия последнего пункта в каждом списке */
    width: calc(1.1em - 1px); /* для перфекционистов */
    border-left: 1px solid #ccc;
}
