2017-12-04 4 views
0

2つの子を持つツリー内の数値ノードを返すことになっているメソッドに取り組んでいます。ここに私がこれまで持っているものは...2つの子を持つノードの戻り数

public int twoChild(TreeNode<Integer> root){ 
    if (root == null) 
     return 0; 
    else if (root.left != null && root.right != null) 
     int leftTwoChild = twoChild(root.left); 
     int rightTwoChild = twoChild(root.right); 
     return 1 + leftTwoChild + rightTwoChild; 

私はそれを持っているとは思えませんが、私は正しいアイデアを持っているかもしれません。もし誰かがこれをどうやって進めるのか私を導くことができたら、私はそれを高く評価します!

+0

元の質問の編集をやめてください。問題のコードを修正するのはやめてください。私はそれを元のコードに戻しています。あなたはすでにあなたの答えを持っています。 –

答えて

1

各サブツリーを個別にテストする必要があります。ベースケースは、の現在のツリーに両方の子がある場合に発生し、最終結果の1つとしてカウントしますが、それでもツリーの残りの部分をトラバースする必要があります。これは私が意味するものです:

public int twoChild(TreeNode<Integer> root) { 

    // base case: tree is empty 
    if (root == null) return 0; 

    // base case: tree has both children, or not  
    int count = root.left != null && root.right != null ? 1 : 0; 

    // recursive cases: traverse both subtrees, accumulating result 
    count += twoChild(root.left); 
    count += twoChild(root.right); 

    // return result of recurring on both subtrees 
    return count; 

} 
+0

あなたがしたことが分かりました。私はあなたの使った方法にあったものを試して調整するために、私の質問のコードを更新しました。今私が行ってきた例のほとんどは、すべてのための単一のカウンタだけではなく、左右の変数を別々に使用するので、私はそれを保っていました。左の整数と右の整数を持つ私の例のように、どこで行うのが良い方法はありますか? –

+0

これは単なるスタイルの問題ですが、結果を変更することはありません...しかし、各再帰呼び出しの結果を別々の変数に格納し、最後に3つの変数を追加することができます: 'count'、' countLeft'、 'countRight'。 –

+0

申し訳ありませんが、私は質問の中で今何を意味し、適切に動作するのでしょうか? –

関連する問題