2016-08-04 45 views
0

enter image description hereBeseitigung von Blättern, zwischen Knoten in einem JTree sind

Nehmen wir an, dass ich ein JTree ähnlich dem Bild habe ich zur Verfügung gestellt, in dem die Anzahl der Blätter und Knoten wird jedes Mal, wenn ich den Code ausführen variieren. Nun, wie könnte ich die Knoten, die leer sind (AKA habe keine Kinder) entfernen, da ich nicht überprüfen kann, also sehen, ob es leer sein wird, wie ich sie zum Baum hinzufügen?

Ich habe versucht, eine Aufzählung zu verwenden, um den Baum zu durchqueren und nach jedem Knoten zu überprüfen, wie viele Kinder es hat, aber das half nicht, auch wenn ich sagen könnte, dass der Knoten, den ich bin, ein Knoten ist entfernt werden. Ich muss seinen Eltern sagen, dass sie ihn entfernen sollen. Ich kann ihm nicht sagen, dass er sich von seinem Elternknoten entfernen soll.

Was brauche ich, um das zu erreichen, wonach ich suche?

+1

Bitte schreiben Sie Code, den Sie bisher versucht haben. – SomeDude

+1

1) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) posten. 2) Warum kein Interesse daran, Knoten wie 'Dull',' Pressure', 'Burning' zu entfernen ... die keine Kinder haben? –

+0

Der Grund, warum ich diese Knoten nicht entfernen möchte, ist, weil sie Blätter sind, die keine anderen Blätter enthalten. Im Grunde möchte ich Knoten entfernen, die keine Kinder von Knoten haben, die Kinder haben, so dass ich möchte, dass ein Knoten entweder nur andere Knoten oder nur Blätter hat, aber nicht beide gleichzeitig. Und tut mir leid, aber ich kann den Code nicht posten, den ich habe, da ich keinen Zugang zu dem PC habe, auf dem es ist, und ich darf nicht meine Arbeit nach Hause nehmen. –

Antwort

2

Nun, wie kann ich die Knoten zu entfernen, die leer sind ... so will ich einen Knoten entweder nur andere Knoten oder nur Blätter, aber nicht beides zugleich

Traverse Baum und für Knoten überprüfen, die folgenden Kriterien

  1. ist ein Blatt
  2. Hat Geschwister haben, die nicht Blätter sind.

auch wenn ich, dass der Knoten ich bin sagen könnte, ein Knoten ist, dass ich entfernt werden muss, um seine Eltern ihm sagen, zu entfernen ich ihm sagen kann nicht, sich von seinem übergeordneten Knoten zu entfernen.

Das ist, was die DefaultTreeModel.removeNodeFromParent() Methode tut. So können Sie den Baum rekursiv durchlaufen und Knoten basierend auf Ihren Kriterien entfernen.

All dies gesagt, es sieht aus wie eine lange Route um die anfängliche Zugabe dieser Knoten. Ohne die zugrunde liegende Datenstruktur zu kennen, um den Baum zu füllen, kann man nur raten, wie man verhindert, dass diese Knoten an erster Stelle hinzugefügt werden.