2017-03-29 1 views
1

兄弟は、同じ親を持つノードです。バイナリツリーでは、最大で1つの兄弟が存在します。ルートは兄弟を持つことができないので、ルートは印刷しないでください。兄弟を持たないバイナリツリー内のすべてのノードを出力しますか?

私は今まで使ってきたすべてのテストケースでうまく動作するコードを書いていますが、オンラインジャッジでそれを提出しようとしたとき、ほとんどのケースで間違っていました。私はそれが何であるか把握するために最善を尽くしたが、何がバグかもしれないかを知ることができない。また、私はそれらにアクセスすることができないので、その特定のテストケースのために実行することはできません。

public static void printNodesWithoutSibling(BinaryTreeNode<Integer> root) { 

     if(root==null) 
     return; 


     printNodesWithoutSibling(root.left); 
     printNodesWithoutSibling(root.right); 

     if(root.right==null && root.left!=null) 
     { 
      System.out.print(root.left.data+" "); 
      return; 
     } 



     else if(root.left==null && root.right!=null) 
     { 

      System.out.print(root.right.data+" "); 
      return; 
     } 
} 
+0

は、少なくとも1個のサンプルが予想出力があるあなたの教授やTA –

+0

のために良い質問のように聞こえるJavaでのリファクタリングのための任意の問題を持っていないだろうと思いますか?コードは常に空白スペースを追加します。最後のノードであってもそれは受け入れられますか? –

+0

はいテストケースのうち4つは正常に実行されましたが、他のテストケースは実行できませんでした –

答えて

0

あなたのコードでは、右の兄弟なしの左の子供の場合を考慮していません。

ノードに兄弟があるかどうかを判断するために必要な知識は、その親にあります。

次のコードスニペットは、兄弟を持たないノードをあらかじめ印刷しています。あなたは簡単にそれを変更することができますinorderまたはpostorderでそれを必要としています。コードは、C++で書かれた、私はあなたが

void print_nodes_without_sibling(Node * root, bool no_sibling = false) 
{ 
    if (root == nullptr) 
    return; 

    if (no_sibling) 
    cout << root->key << endl; 

    print_nodes_without_sibling(root->left, 
           root->left != nullptr and root->right != nullptr); 
    print_nodes_without_sibling(root->right, 
           root->left != nullptr and root->right != nullptr); 
} 
関連する問題