2016-04-03 8 views
0

このデータ構造の問題を解決するにはちょっと指示が必要です。私はBSTのadd()メソッドを作成する必要があります。私はこの問題の再帰的な解決法を行う方法を知っていますが、これに対して非再帰的な解決策は何ですか?ここに私のクラスがあります。データ構造内のBST add()メソッド

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

何を試しましたか? – jbapple

+1

はい、 'add()'メソッドを記述しようとしてください。バグを見つけたら、ここでそれについての質問をしてください。 – markspace

+0

申し訳ありませんが、ちょっと混乱してしまいました。私はそれを以下の回答の助けを借りて少し変更しましたが、どちらもうまくいきませんでした。 – Jennifer

答えて

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

これはうまくいきましたが、好奇心の外に.keyはどういう意味ですか?私はまだそれを見ていない – Jennifer

+1

私はそれをより良いと呼ぶかもしれません:) –

1

はそれを考え出しました!

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(); 
    }} 
    } 
    }