Es ist nicht schwerer.
Bei doppelt verknüpften Listen ordnen Sie beim Einfügen Speicher zu und verknüpfen dann entweder mit dem Kopf oder dem vorherigen Knoten und entweder mit dem Ende oder dem nächsten Knoten. Wenn Sie löschen, wird die Verknüpfung zu genau derselben Person aufgehoben und Speicher freigegeben. Alle diese Operationen sind symmetrisch.
Dies setzt voraus, dass Sie in beiden Fällen den Knoten zum Einfügen / Löschen haben. (Und im Falle des Einfügens, dass Sie auch den Knoten vor dem Einfügen haben, könnte das Einfügen in gewisser Weise als etwas komplizierter angesehen werden.) Wenn Sie versuchen, zu löschen, müssen Sie nicht den Knoten löschen, sondern die Nutzdaten des Knotens müssen Sie dann natürlich zuerst die Liste nach der Nutzlast durchsuchen, aber das ist kein Mangel an Löschung, oder?
Bei ausgeglichenen Bäumen gilt dasselbe: Ein Baum muss in der Regel unmittelbar nach dem Einfügen und auch unmittelbar nach dem Löschen ausgeglichen werden. Es empfiehlt sich, nur eine Auswuchtroutine zu verwenden und diese nach jedem Vorgang anzuwenden, unabhängig davon, ob es sich um eine Einfügung oder eine Löschung handelt. Wenn Sie versuchen, eine Einfügung zu implementieren, bei der der Baum immer im Gleichgewicht bleibt, und eine Löschung, bei der der Baum immer im Gleichgewicht bleibt, ohne dass beide dieselbe Abgleichsroutine verwenden, verkomplizieren Sie unnötigerweise Ihr Leben.
Kurz gesagt, es gibt keinen Grund, warum das eine schwerer sein sollte als das andere, und wenn Sie dies feststellen, ist es in der Tat möglich, dass Sie der (sehr menschlichen) Tendenz zum natürlichen Denken zum Opfer fallen Konstruktiv als subtraktiv, was bedeutet, dass Sie das Löschen möglicherweise komplizierter implementieren, als es sein muss. Aber das ist ein menschliches Problem. Aus mathematischer Sicht gibt es kein Problem.
pop
ist mitextract-min
?