Перестроить эффективную древовидную структуру - PullRequest
0 голосов
/ 09 декабря 2010

У меня такая древовидная структура:

1 ABC

1.1 DEF

1.1.2 GHI

1.2 JKL

1.2.1 MNO

2 PQR

2.1

... без ограничений по глубине и длине каждого уровня.Теперь происходит то, что я убираю некоторые элементы по всей древовидной структуре, и в конце я хочу иметь правильную, реструктурированную нумерацию иерархии.

Как вы обычно заново сортируете и применяете правильную нумерацию иерархииНаименьший объем работы в таком случае?Это несколько базовый вариант использования, но я ищу место для улучшения.

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Вы можете использовать приоритетную очередь , например, самобалансирующееся дерево .

0 голосов
/ 10 декабря 2010

Полагаю, вы храните и число, и текст в одной переменной value.

Самая простая вещь , которую вы могли бы сделать, это:

  1. Разделите это на две переменные: number и text
  2. Всякий раз, когда вы меняете местами два узла дерева (т.е. во время сортировки), меняйте местами только значения text и сохраняйте значения number там, где они есть.
  3. Всякий раз, когда вы добавляете новый элемент в качестве последнего подэлемента, просто используйте previousLastElement.number + 1
  4. Всякий раз, когда вы распечатываете номер элемента, к нему добавляются все родительские номера, разделенные точкой.

Единственная оставшаяся сложность теперь - это когда вы вставляете элементы, когда вам нужно «нажимать» номера других элементов после этого (но только на этом уровне), или когда вы удаляете элементы, когда вам нужно будет потяните их.

...