2011-01-26 14 views
-1

私を助けてくださいできますか?私はノードを挿入してバイナリツリーを作っています。どのように私は新しいノードを現在のノードにBST規則に関して挿入できますか?バイナリツリーの問題。助けが必要です

例:最初にルートは空です。

入力番号:50

「成功!」と表示されます。

インサート数:80

:成功40

挿入番号の左の部分木に挿入20

:成功50

挿入番号の左の部分木に挿入40

が右サブツリーに挿入されました。50

私を助けてもらえますか?

class Node 
{ 
    public int num; 
    public Node llink; 
    public Node rlink; 
} 


public class BinaryTreeOperations 
{ 
    //public Node llink=null; 
    // public Node rlink=null; 
    private Node temp; 
    private Node current; 
    private Node root; 

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


    public void insertNum(int n) 
    { 

    temp=null; 
    current=null; 


    Node newNode = new Node(); 
    newNode.num=n; 
    newNode.llink=null; 
    newNode.rlink=null; 


    if(isEmpty()) 
    { 
     root=newNode; 
     System.out.println("Successfully inserted!"); 
    } 
    else 
    { 
     temp=root; 
     while(temp!=null) 
     { 
     current = temp; 
     root = current; 
     temp=null; 
     } 

    if(n<current.num) 
    { 
     current.llink=newNode; 
     //current.llink=temp; 
     System.out.println("inserted on the left subtree " +current.num); 
    } 
    else 
    { 
     newNode.rlink=newNode; 
     System.out.println("inserted on the right subtree "+current.num); 
    } 
    } 
} 
+0

これは宿題ですか? – Blorgbeard

+0

また、これまでのコードで何が問題になっていますか? – Blorgbeard

+0

お返事ありがとうございました。私は初心者の方にお礼を言います。私は間違って投稿すると謝ります。宿題です。 – jemz

答えて

0
else 
    { 
    temp=root; 
    while(temp!=null) 
    { 
     current = temp; 
     root = current; 
     temp=null; 
    } 

このループは、今までに一度だけ実行されます。ここでは

は私のコードです...あなたの肯定的な反応を期待して、事前にありがとうございます。おそらくあなたが意図したものではありません。あなたはnewNode.rlinkに割り当てる他の支店で、current.llinkに割り当てる一方の分岐で:)

if(n<current.num) 
{ 
    current.llink=newNode; 
    //current.llink=temp; 
    System.out.println("inserted on the left subtree " +current.num); 
} 
else 
{ 
    newNode.rlink=newNode; 
    System.out.println("inserted on the right subtree "+current.num); 
} 

。おっとっと。 :)

+0

okay thenk sir私は私のコードを編集しようとしています...ありがとうございました – jemz

+0

私はこれをコード化することができますどのように混乱していますか(現在は子供が残っています){ 左の子現在のループと – jemz

+0

をループして、私のコードをあなたの回答に投稿したように投稿コード – jemz

2

whileループが間違っているようです。あなたが本当にやりたいことは、新しいノードの親として機能するノードに到達するまで、ルートから始めてツリーを横断することです。新しいノードがどこに行かなければならないのかを見つけるために、あなたの下にはトラバーサルや検査は行われていません。それがあなたが本当にやるべきことです。二分探索木に追加するためのあなたの方法論は間違っているようだ

while(parent not found) { 
    if (new node is smaller than current) { 
     if (current has left child) { 
      assign left child to current and loop 
     } else { 
      make current the parent of the new node 
     } 
    } else { 
     .... 
    } 
} 
+0

私はこれを混乱させています私は本当にあなたがコードを教えていただけますか分かりません。 – jemz

+0

これは宿題の質問であるため、意図的に擬似コードで書かれています:) – ryanprayogo

+0

@ryanprayogo先生は、(現状== current.llink)がこれを意味するのかどうかを明確にするために返信いただきありがとうございます。 – jemz

0

while(temp!=null) { 
    current = temp; 
    root = current; 
    temp=null; 
} 

は次のようなものであるべき。

ツリーの構造をどのように維持するかを理解するには、バイナリ検索ツリーを読んでおく必要があります。

以下は、バイナリ検索ツリーに追加する方法を示すコードですが、データがない場合はツリーを空と定義します。

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

残りのコードはかなりわかりやすく、順序を維持するためにツリーに追加する方法を理解するのに役立ちます。

public boolean add(Comparable target) { 
    if(isEmpty()) { 
     setData(target); 
     this.setLeftTree(new BinarySearchTree()); 
     this.setRightTree(new BinarySearchTree()); 
     return true; 
    } else { 
     int comparison = getData().compareTo(target); 
     if(comparison == 0) 
      return false; 
     else { 
      if(comparison < 0) { 
       return getRightTree().add(target); 
      } else { 
       return getLeftTree().add(target); 
      } 
     } 
    } 
} 

他に質問がある場合はお知らせください。

+0

私のコードについて教えてください。どうすればいいですか?教えてください... – jemz

+0

先生は助けてください私の先生が望んでいるのは彼が擬似コードを与えたいからです。そして、私たちはコードを提供するだけです。あなたの肯定的な反応を期待して、 – jemz

関連する問題