Ich habe versucht, eine BST aus einer bestimmten Reihenfolge (BFS-Reihenfolge) zu erstellen. Ich weiß, dass es möglich ist, aber ich weiß nicht, wie ich das schreiben kann. Das Problem ist, dass ich mit der BFS-Sequenz arbeiten musste. Also kann ich Rekursion hier nicht verwenden und ich musste mein Programm iterativ schreiben ... Und ich finde das ein wenig verwirrend.Konstruiere eine BST aus der Ebenenreihenfolge (BFS-Reihenfolge)
Ich habe versucht, dies zu tun:
public static TreeNode constructBFSTree(ArrayList<Integer> bfs) {
if (bfs== null) return null;
ArrayList<TreeNode> result = new ArrayList<TreeNode>();
for (int i = 0; i < bfs.size()-1; i ++){
TreeNode node = result.get(i);
int leftValue = (bfs.get(i+1)!=null)? bfs.get(i+1) : Integer.MAX_VALUE ;
int rightValue = (bfs.get(i+2)!=null)? bfs.get(i+2) : Integer.MIN_VALUE;
node.left = (leftValue <= node.data)? new TreeNode(leftValue) : null;
node.right = (rightValue > node.data)? new TreeNode(rightValue) : null;
result.add(node);
}
return result.get(0);
}
Die lokale Arraylist hier nicht wirklich wichtig ist. Ich füge es einfach hinzu, um den ersten Knoten zu fangen, der die Wurzel des konstruierten Baums ist, den ich zurückgeben soll. Das Problem ist, dass ich nur die Wurzel und ihr Kind bekomme.
Wie kann ich dieses Programm schreiben?
Ein paar Vorschläge. 1. Verwenden Sie LinkedList anstelle von Array-Liste. Das garantiert Ordnung. 2. Versuchen Sie, die erweiterte for-Schleife zu verwenden. für (TreeNode n: Ergebnis). Diese würden dir das Leben leichter machen. –
Amal
Danke für Ihren Kommentar, aber ich denke, es ist nur ein Detail, nein? Weil ich in dieser Funktion immer noch blockiert bin – salamanka44
Was genau meinst du mit BFS-Bestellung? Es gibt nur eine Bestellung, eine Vorbestellung, eine Nachbestellung oder eine Stufenbestellung. –