Mein Code zum Einfügen eines Knotens in eine BST funktioniert nicht. Wenn ich versuche anzuzeigen, werden nur die letzten beiden Knoten des Baums angezeigt, d. H. Die Knoten in einem Baum werden irgendwie überschrieben. Was habe ich falsch gemacht? Danke im Voraus!

public Node Insert(int value)
    {
        Node newNode = new Node();
        newNode.data = value;
        newNode.left = null;
        newNode.right = null;

        if(root == null){
            root = newNode;
            return root;
        }
        else{
            while(root != null){
                if(root.data < value){
                    if(root.right != null){
                        root = root.right;
                    }
                    else{
                        root.right = newNode;
                        break;
                    }
                }
                else{
                    if(root.left != null){
                        root = root.left;
                    }
                    else{
                        root.left = newNode;
                        break;
                    }

                }
            }
            return root;
        }

    }
    public void inOrder(){
        inOrder(this.root);
    }
    private void inOrder(Node root){
        if(root != null){
            inOrder(root.left);
            System.out.println(root.data);
            inOrder(root.right);
        }
    }
0
Michael 31 Dez. 2015 im 04:43

2 Antworten

Beste Antwort

Root zeigt auf den obersten Knoten Ihres Baums. In der Zwischenzeit ändern Sie seinen Wert. Sie müssen eine andere Variable verwenden (sagen Sie 'n').

Und definieren Sie es dann in einer der Quelldateien

if(root == null){
        root = newNode;
        return root;
    }
    else{
        Node n = root;
        while(n != null){
        ...
        }
        return root;
        ...

Sie müssen 'root' zurückgeben, nicht 'n', da sich die root nicht ändert.

0
Jose Luis 31 Dez. 2015 im 02:02

Der Anfangswert von 'n' ist 'root'. Und währenddessen verwenden Sie nur 'n'.

public Node Insert(int value)
{
    Node newNode = new Node();
    newNode.data = value;
    newNode.left = null;
    newNode.right = null;

    if(root == null){
        root = newNode;
        return root;
    }
    else{
        while(root != null){
            if(root.data < value){
                if(root.right != null){
                    root = root.right;
                    // root should point to the head of the tree.
                    /* Here you are changing the variable root to point to some other memory location and the reference to the head of the tree is lost. You should store the reference to the head of the tree in a temporary variable to return later  */
                }
                else{
                    root.right = newNode;
                    break;
                }
            }
            else{
                if(root.left != null){
                    root = root.left;
                   //root should point to the head of the tree.
                    /* Here you are changing the variable root to point to some other memory location and the reference to the head of the tree is lost. You should store the reference to the head of the tree in a temporary variable to return later  */
                }
                else{
                    root.left = newNode;
                    break;
                }

            }
        }
        // return temporary variable which points to the head of the tree here
        return root;
    }

}
public void inOrder(){
    inOrder(this.root);
}
private void inOrder(Node root){
    if(root != null){
        inOrder(root.left);
        System.out.println(root.data);
        inOrder(root.right);
    }
}
0
Ashish Gupta 31 Dez. 2015 im 09:08