Rysowanie drzewa bst w konsoli java

0

Witam stworzyłem sobie drzewo binarne i mam problem jak je wypisać w konsoli.
Struktura drzewa opiera się na obiekcie

public class Node<T>{
    T key;
    Node left = null;
    Node right = null;
    Node parent = null;
    Node(T key) {
        this.key = key;
    }
}

mam stworzone algorytmy dodawania usuwania przeszukiwania inOrder postOrder i preOrder. Dziękuję za pomoc :)

0

@topik92: stworzyłem algorytm BFS i działa tylko nie wiem jak chciałbyś wypisywać na bieżąco:

 Node<Integer> v;
        ArrayList<Node> q=new ArrayList<>();
        v=myTree.root;
        q.add(v);
        while(!q.isEmpty()){
            v=q.remove(0);
            System.out.print(v.key + " ");
            if(v.left!=null){
                q.add(v.left);
            }
            if(v.right!=null){
                q.add(v.right);
            }
        }

dodaję je w takiej kolejności

        myTree.addKey(5);
        myTree.addKey(1);
        myTree.addKey(3);
        myTree.addKey(4);
        myTree.addKey(0);
        myTree.addKey(6);
        myTree.addKey(7);
        myTree.addKey(8);

i wypisuje prawidłowo
5 1 6 0 3 7 4 8
z zaznaczonymi liniami podziału (ręcznie) ma to tak wyglądać
5 | 1 6 | 0 3 7 | 4 8 |

gdybyś mógł mnie nakierować byłbym wdzięczny :)

0

pisze z palca wiec mogą być drobne błędy. Dla drzewa z jednym korzeniem np. tak:

Node<Integer> v;
        ArrayList<Node> q=new ArrayList<>();
        ArrayList<Node> tmp=new ArrayList<>();
        v=myTree.root;
        tmp.add(v);
        
        while(!tmp.isEmpty()){
          q = tmp;
          tmp=new ArrayList<>();

          while(!q.isEmpty()){
            v=q.remove(0);
            System.out.print(v.key + " ");
            if(v.left!=null){
                tmp.add(v.left);
            }
            if(v.right!=null){
                tmp.add(v.right);
            }
         } 
         System.out.print("|");
    }
}
0

Dzięki działa mała modyfikacja

Node<Integer> v;
        ArrayList<Node> q=new ArrayList<>();
        ArrayList<Node> tmp=new ArrayList<>();
        v=myTree.root;
        tmp.add(v);
        while(!tmp.isEmpty()){
            q = tmp;
            tmp=new ArrayList<>();
            System.out.println();
            while(!q.isEmpty()){
                v=q.remove(0);
                System.out.print(v.key + " ");
                if(v.left!=null){
                    tmp.add(v.left);
                }
                if(v.right!=null){
                    tmp.add(v.right);
                }
            }}

wypisuje
5
1 6
0 3 7
4 8

może komuś się przyda ;)
Teraz tylko rozkminić

1 użytkowników online, w tym zalogowanych: 0, gości: 1