2016-04-03 8 views
0

これは宿題のためのものです。私は信じられないほど、このadd()関数を動作させるために必要なことについて混乱しています。わかりにくい部分は、左と右の子をタイプBinaryTreeとして定義する必要があり、add()関数はNodeではなくStringになります。これはこのサイトのすべての例でわかります。文字列をBinaryTree型の新しい子に設定する方法がわかりません。Java - この再帰的なバイナリツリーについて非常に混乱しています

任意のヘルプ&ガイダンスが評価されます。

import java.util.*; 

public class BinaryTree { 
    private String data; 
    private BinaryTree leftChild; 
    private BinaryTree rightChild; 


    public BinaryTree() { 
    data = null; 
    leftChild = null; 
    rightChild = null; 
    } 


    public BinaryTree(String d) { 
    data = d; 
    leftChild = null; 
    rightChild = null; 
    } 

    public BinaryTree(String d, BinaryTree left, BinaryTree right) { 
    data = d; 
    leftChild = left; 
    rightChild = right; 
    } 


    public String getData() { return data; } 
    public BinaryTree getLeftChild() { return leftChild; } 
    public BinaryTree getRightChild() { return rightChild; } 


    public void setData(String d) { data = d; } 
    public void setLeftChild(BinaryTree left) { leftChild = left; } 
    public void setRightChild(BinaryTree right) { rightChild = right; } 


    public String root; 

    //This function is what I'm stuggling with 
    public void add(String item){ 



    if(root==null) 
    { 
     root = item; 
    } 
    else 
    { 
     String tmp = root; // save the current root 
     if(root.compareTo(item)>0) 
     { 
      setData(item); 
      add(item); //I should have setBinaryTree(item) here, but I can't convert type String to BinaryTree?. 
     } 
     else if(root.compareTo(item)<0) 
     { 
      setData(item); 
      add(item); 
     } 
     root = tmp; // put the root back to its original value 
    } 
    return; 
    } 
    } 

答えて

0

ツリーを横断しながら再帰する必要があります。現在、同じノードに追加しようとしています。このようなことをしてください。

if(root.compareTo(item)>0) 
{ 
    if (leftChild == null) { 
     leftChild = new BinaryTree(item); 
    } else { 
     leftChild.add(item); 
    } 
} 

そして、正しい子供のために同様のことをしてください。

0

あなたがする必要があることは、提供されたコンストラクタを使用してそれを左または右の子に割り当てることによって、新しいBinaryTreeオブジェクトを作成することです。

public void add(String item){ 



    if(root==null){ 
     root = item; 
    }else{ 
     String tmp = root; // save the current root 
     BinaryTree bTree = new BinaryTree() 
     if(root.compareTo(item)>0){ 
      bTree.setData(item); 
      setLeftChild(bTree); 
     }else if(root.compareTo(item)<0){ 
      bTree.setData(item); 
      setRightChild(bTree); 
     } 
     root = tmp; // put the root back to its original value 
    } 
    return; 
} 
関連する問題