2016-04-03 11 views
0

Ich brauche nur ein wenig Richtung, um dieses Datenstrukturproblem zu lösen. Ich muss eine add() - Methode für eine BST erstellen. Ich weiß, wie man die rekursive Lösung für dieses Problem macht, aber was ist eine nicht-rekursive Lösung für dieses Problem? Hier ist meine Klasse.BST in Datenstrukturen die add() Methode

import java.util.*; 

public class BST 
{ 
// instance variables 
private BSTNode m_root; 
private int m_size; 

// constructor 
public BST() 
{ 
    m_root = null; 
    m_size = 0; 
} 

// add a value into the tree 

    public void add(int v) 
{ BSTNode current = m_root; 
    if(current == null) { 
    m_root=new BSTNode(v); 
    m_size++; 
    } 
    else 
    { 
    while(current!=null) { 
    if(current.getInfo() > v) { 
    if(current.getLeft() == null) { 
    m_root.setLeft(new BSTNode(v)); 
    m_size++; 
    current=null; 
    } 
    else 
    current = current.getLeft(); 

    } 
    else if(current.getInfo()< v) { 
    if(current.getRight() == null) { 
    m_root.setRight(new BSTNode(v)); 
    current=null; 
    m_size++; 
    } 
    else current = current.getRight(); 
}}}} 

// get the size of the tree 
public int size() 
{ 
    return m_size; 
} 

// empty the tree 
public void clear() 
{ 
    m_root = null; 
    m_size = 0; 
} 
} 
+1

Was haben Sie schon versucht? – jbapple

+1

Ja, bitte versuchen Sie, die 'add()' Methode zu schreiben. Wenn Sie einen Fehler finden, stellen Sie hier eine Frage dazu. – markspace

+0

Sorry, es ist ein bisschen chaotisch, also habe ich es nicht hingelegt. Ich habe es ein wenig mit Hilfe der Antwort unten geändert, aber das hat auch nicht funktioniert ... – Jennifer

Antwort

0
BSTNode current = m_root; 
if(current == null) { 
    current = new BSTNode(v); 
    return; 
} 
while(true) { 
    if(current.key > v) { 
     if(current.left == null) { 
      current.left = new BSTNode(v); 
      break; 
     } 
     else 
      current = current.left; 
    } 
    else if(current.key < v) { 
     if(current.right == null) { 
      current.right = new BSTNode(v); 
      breakl; 
     } 
     else current = current.right; 
    } 
} 
+0

Das hat funktioniert, aber aus Neugier was bedeutet .key? Ich habe das noch nicht gesehen – Jennifer

+1

Ich kann es nennen. Wert besser :) –

1

es heraus!

public void add(int v) 
    { BSTNode current = m_root; 
    if(current == null) { 
    m_root=new BSTNode(v); 
    m_size++; 

    } 
    else 
    { 
    while(current!=null) { 
    if(current.getInfo()==v) 
    {current=null;} 
    else if(current.getInfo() > v) { 
    if(current.getLeft() == null) { 
    m_root.setLeft(new BSTNode(v)); 
    m_size++; 
    current=null; 
    } 
    else 
    current = current.getLeft(); 

    } 
    else if(current.getInfo()< v) { 
    if(current.getRight() == null) { 
    m_root.setRight(new BSTNode(v)); 
    current=null; 
    m_size++; 
    } 
    else current = current.getRight(); 
    }} 
    } 
    }