Binärbaum probleme

dasKrokodil

Mitglied
Guten Morgen 🙂

Ich habe eine Probeklausuraufgabe vor mir, bei der ich Schwierigkeiten habe..
Die Aufgabe lautet: Die Methode rightLeafs soll die Anzahl der Knoten im TeilBaum mit der Wurzel n zurückgeben, die zugleich das rechte Kind eines anderen Knotens und ein Blatt sind.

Ich kriege bei mir counter1= leftChild.rightLeafs(n) ein NullPointer, wenn ich es teste.
PS: Meine Lösung befindet sich in der Klasse.

Danke im Voraus!

lg DasKrokodil

Java:
 import java.util.NoSuchElementException;

public class BinarySearchTree<T extends Comparable<T>>
{
    private T content;
    private BinarySearchTree<T> leftChild, rightChild;

    
    public BinarySearchTree() 
    {
        content = null;
        leftChild = null;
        rightChild = null;
    }

    public boolean isEmpty() 
    {
        return content == null;
    }

    public boolean isLeaf() 
    {
        return leftChild.isEmpty() && rightChild.isEmpty();
    }


    public int rightLeafs(BinarySearchTree n)
    {   
        int counter= 0;
        int counter1= 0;
        int counter2= 0;
        
        counter1= leftChild.rightLeafs(n);
        counter2= rightChild.rightLeafs(n);
        counter= counter1 + counter2;
        
        if(n.isEmpty())
        {
            return 0;
        }
        
        if(n.rightChild != null && n.rightChild.isLeaf())
        {
            return 1;
        }
        return counter;
     }
}
 
Moin,

ganz einfach: weil dort "leftChild" (und übrigens auch "rightChild") NULL sind !!

Du hast sie doch oben so initialisiert - wo sollen den die ggf. enthaltenen Leafs herkommen, wenn Du sie nicht füllst/ausliest oder was auch immer 🙁

Gruß
Klaus
 
Ich hab meinen baum mit diesen Werten gefüllt:

Java:
public class BstTest
{
    public static void main( String[] args )
    {
        test();
    }

    public static void test()
    {
        BinarySearchTree<Integer> ints = new BinarySearchTree<>();
        ints.add( 23 );
        ints.add( 12 );
        ints.add( 45 );
        ints.add( 1 );
        ints.add( 7 );
        ints.add( 19 );
        ints.add( 31 );
        //ints.add(50);

        ints.extendedShow();
        System.out.println();
        ints.showPreOrder();
        
        
        System.out.println(ints.rightLeafs(ints));
        
        
    }
}
[/Java]

oder verstehe ich deine Antwort falsch?
 
Zuletzt bearbeitet:
Zeig mal deine
Code:
add()
Methode. Wo weisst du den Variablen leftChild und rightChild neue Werte zu. In deinem Code sind diese null und werden auch nirgends gesetzt.
 
Java:
public void add( T t )
    {
        if ( isEmpty() ) 
        {
            content = t;
            leftChild = new BinarySearchTree<T>();
            rightChild = new BinarySearchTree<T>();
        }
        else
        {
            if ( content.compareTo( t ) > 0 )
            {
                leftChild.add( t );
            }
            else if ( content.compareTo( t ) < 0 )
            {
                rightChild.add( t );
            }
        }
    }
 

Neue Themen


Zurück
Oben