2017-03-25 13 views
1

互いに等しい2人の息子を持つノードをカウントする操作を書く必要があります。私はそれにしようとしたが、私はすべてのコードパスが値を返すわけではないというエラーがある。 テストを手伝ってください。 ありがとうございました。2人の同じ息子を持つノードをカウントする

public static int CountWhoHasTwoSameSons(BinNode<int> Head) 
{ 
     if (Head != null) 
     { 
      if (IsLeaf(Head)) 
       return 1; 

      if ((Head.HasLeft() && Head.HasRight()) && (Head.GetRight() == Head.GetLeft())) 
       return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) + CountWhoHasTwoSameSons(Head.GetRight()); 
     } 

} 

static void Main(string[] args) 
{ 
     BinNode<int> t = new BinNode<int>(3); 
     BinNode<int> t1 = new BinNode<int>(3); 
     BinNode<int> t2 = new BinNode<int>(3); 
     BinNode<int> t3 = new BinNode<int>(3); 
     BinNode<int> t4 = new BinNode<int>(t,3,t1); 
     BinNode<int> t5 = new BinNode<int>(t2,3,t3); 
     BinNode<int> t6 = new BinNode<int>(t4,3,null); 
     BinNode<int> Head = new BinNode<int>(t6,3,t5); 
     Console.WriteLine(SumTree(Head)); 
     Console.WriteLine(LeafCounter(Head)); 
     Console.WriteLine(CountWhoHasTwoSameSons(Head)); 

     Console.ReadLine(); 
} 

答えて

0

エラーが示すように、現在の関数には場合によってはreturn文が含まれていない場合があります。

public static int CountWhoHasTwoSameSons(BinNode<int> Head) 
{ 
     if (Head == null) 
      return 0; 
     if (IsLeaf(Head)) 
      return 1; 
     if ((Head.HasLeft() && Head.HasRight()) && 
      (Head.GetRight() == Head.GetLeft())) // It happens with this if statement! 
       return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) + 
       CountWhoHasTwoSameSons(Head.GetRight()); 

} 

「すべてのパスが値を返すわけではありません」というエラーは正しいです。実行フローが3番目のifステートメントに到達し、それがfalseの場合、返される値はありません。あなたの関数は常にintを返すように定義されており、そのケースは考慮されていません。だから、

、それを修正するために、このような何かを試してみてください。

public static int CountWhoHasTwoSameSons(BinNode<int> Head) 
{ 
    if (Head != null) 
    { 
     if (IsLeaf(Head)) 
      return 1; 

     if (Head.HasLeft() && Head.HasRight()) 
     { 
      if (Head.GetRight().GetValue() == Head.GetLeft().GetValue())) 
       return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) + CountWhoHasTwoSameSons(Head.GetRight());  
     } 
    } 
    return 0; 
} 
+0

は、その私のために働いていない –

+0

新しいエラーを指摘してもらえますか? – 0xDEFACED

+0

私は質問を編集しました。それは0を返します(メインを参照) –

2

あなたがIfステートメントの外にリターンを追加する必要があり、この機能は何かを返すかない場合、コンパイラがうまくできません。 0を返す関数の最後にreturnステートメントを追加するだけでよい場合、それはうまくいくはずです。もっとも推奨される修正ではなく、実際に関数を書き直して、実際には戻り値がコンパイラを満足させる方法以上のものになるはずですが、うまくいくはずです。

ダニー

+0

サンティアゴ・ヴァレラが言ったこと。私は私のことを始める前にあなたの答えを見ませんでした。 – dannyhut

+0

No buddy :) – 0xDEFACED

関連する問題