2016-07-29 7 views
-4

私はこの論理についてどうやって行くのだろうかと思っていました。ノードに0または2の子があるかどうかはどのようにわかりますか?これは、これまでのところ、ノードtに左右の子があるかどうかを調べることです。ツリー内のノードの子ノードが0か2かどうかを確認する方法は?

public static boolean hasChildren(Node t) { 
    if (t.left == null && t.right == null){ 
     return true; 
    } 
    return false; 
} 

答えて

-1

あなたはこのような何か必要がありますか:あなたは彼らの両方がnullないときleftrightは両方nullあるとき、または真である条件を探している

public static int hasChildren(Node t) { 
    if (t.left == null && t.right == null){ 
     return 0; 
    } else if (t.left != null && t.right != null){ 
     return 2; 
    } else { 
     return 1; 
    } 

} 
3

を。

return (t.left == null) == (t.right == null); 

最後の式のワラント:これは、この

return (t.left == null && t.right == null) 
    || (t.left != null && t.right != null); 

またはこのような深刻なオタクのためのようなこの

if ((t.left == null && t.right == null) 
|| (t.left != null && t.right != null)){ 
    return true; 
} 
return false; 

のようなこの

if (t.left == null && t.right == null) { 
    return true; 
} 
if (t.left != null && t.right != null) { 
    return true; 
} 
return false; 

のように表現することができますいくつかの議論、私はt leftrightからnullを比較し、次にこれらの2つの比較結果を比較して最終結果を生成します。

ツリー内のすべてのノードが、あなたが再帰的にそれをしなければならないでしょう0または2人の子供を持っていないかどうかを確認するには、次の

public static boolean isLeafOrHasTwoChildren(Node t) { 
    // Both nulls 
    if (t.left == null && t.right == null) { 
     return true; 
    } 
    // One is null, the other one is not null 
    if (t.left == null || t.right == null) { 
     return false; 
    } 
    // Recurse down the tree 
    return isLeafOrHasTwoChildren(t.left) 
     && isLeafOrHasTwoChildren(t.right); 
} 
+0

は問題を。私も別の質問があります、私はちょうど私の質問に感謝したいと思って申し訳ありません。 2人の子供を持つノードが有効なのは、(size-of-larger-child <= size-of-smaller-child * 3)の場合のみです。あなたはノードの最大値と最小値を見つける必要がありますか? – yummyyenni

+0

@yummyyenniツリーサイズに基づく問題は、もっと難しくなります。あなたは常にそれらを再計算するのを避けるために、ノードにカウントを格納する方が良いでしょう。最初にこの問題を解決し、問題が解決しない場合は別の質問を投稿してください。 – dasblinkenlight

関連する問題