2016-04-05 9 views
0

ツリーにノードを挿入しようとしています。バイナリツリーノードの挿入

public void addNode(BinaryTree playerOrTeamLeaf) { 
      if (left == null) { 
       left = new BinaryTree(playerOrTeamLeaf); 
       return; 
      } else if (left != null) { 
       left.addNode(playerOrTeamLeaf); 
      } 

      if (right == null) { 
       right = new BinaryTree(playerOrTeamLeaf); 
       return; 
      } else if (right != null) { 
       right.addNode(playerOrTeamLeaf); 
       return; 
      } 
     } 

わかりましたが、これは問題のあるツリーです。これは現在ツリーがどのように見えるかです。

 a 
    b 
    d 
e 

条件が最初に実行される場合は左に表示されますが、これが問題の原因です。

私は素敵な等木を目指しています。私は問題がIE4サイズのツリーを持っていると言うことを知っています。したがって、この

if left is null then left is equal to a new Node then return; | left = 'B' 
else if left is not null 
go to left object add method and pass in 'E'; 
    if left is null then left is equal to a new Node then return; | left = 'C'  else if left is not null 
    go to left object add method and pass in 'E'; 
        if left is null then left is equal to a new Node then | //seee below 

:私のロジックコードに

A 
    B 
C 

は、この擬似コードの行(これは第五葉のインサートである)、それは '私たちが挿入されている「Dで始めるに沿って走ります私の木はこのように見える。

 A 
    B 
    D 
E 

最初のif文のためにこれを実行していることはわかっていますが、これを回避する方法の論理は私を馬鹿にしてしまいました。私は左と右のステートメントの周りを交換しようとしましたが、それは木が成長する側をちょうど反転します。

私はこれが本質的にリンクされたリストであることを知っていますが、私はこれをどうやってやり遂げることができないのか分かりません。

アイデア?

+0

単にツリーを保持しているか、「キー」に基づいてツリーをソートしていますか? – Fearnbuster

+2

目的のツリーはどのように見えますか?私はどんな種類の樹木を造ろうとしているのか分かりません。あなたの現在のロジックは、ツリーの左側にのみノードを追加します。 – OPK

+0

基本的には等しいツリー8/16/32ノード – Definity

答えて

0

非常に一般的な考え方は何かのようである:

BinaryTree insert(Binary tree, int value) { 
    if (tree == null) { 
     return new BinaryTree(value); 
    } 
    if (value < tree.value) { 
     tree.left = insert(tree.left, value); 
    } else if (value > tree.value) { 
     tree.right = insert(tree.right, value); 
    } 
    return tree; 
} 

BinaryTree tree = null; 
tree = insert(tree, 19); 
tree = insert(tree, 7); 
tree = insert(tree, 23) 
tree = insert(tree, 11); 

      19 
      /\ 
      7 23 
      \ 
      11 

     7 11 19 23 

これは一箇所に挿入する保証します。