2017-03-28 17 views
1

で対称であるならば、私はプログラムをコーディングしていると私はBSTは、その構造は、どのように私はBSTは、その構造

public void traverse (Layer root){  

    if (root.leftChild != null){ 
     traverse (root.leftChild);   
    } 
    if (root.rightChild != null){ 
     traverse (root.rightChild); 
    } 

で対称的であるかどうかを知る必要があり確認することができます私はトラバースコードを持っていますが、私は知りませんそれは助け

+0

最初は、ブール値を返すことをお勧めします。このコードは特別なことをしていないようで、 'root == null 'のときに例外をスローします。 –

+0

[バイナリツリーが鏡像か対称かチェックしてください](http://stackoverflow.com/questions/) 8436623 /バイナリツリーのチェックが鏡像か対称か) –

答えて

1

私は学校でこれを行う方法を学びました。これが私のやり方です。私は覚えていないウェブサイトからそれを学んだが、私はその中にコメントを残した。

boolean isMirror(Node node1, Node node2) 
    { 
     // if both trees are empty, then they are mirror image 
     if (node1 == null && node2 == null) 
      return true; 

     // For two trees to be mirror images, the following three 
     // conditions must be true 
     // 1 - Their root node's key must be same 
     // 2 - left subtree of left tree and right subtree 
     //  of right tree have to be mirror images 
     // 3 - right subtree of left tree and left subtree 
     //  of right tree have to be mirror images 
     if (node1 != null && node2 != null && node1.key == node2.key) 
      return (isMirror(node1.left, node2.right) 
        && isMirror(node1.right, node2.left)); 

     // if neither of the above conditions is true then 
     // root1 and root2 are mirror images 
     return false; 
    } 
boolean isSymmetric(Node node) 
    { 
     // check if tree is mirror of itself 
     return isMirror(node, node); 
    } 
+1

ねえ、ありがとう、分かりやすい –

0
public boolean isSymmetric(Layer root) { 
    return root == null || isSymmetric(root.left, root.right); 
} 

public boolean isSymmetric(Layer left, Layer right) { 
    if (left == null && right == null) return true; 
    return left != null && right != null && left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left); 
} 

ため

対称のおかげでいるかどうかを確認する方法私はあなたがそれ自体

の「ミラー」を形成している場合、ツリーが対称であることを意味しているとし
+0

@ cricket_007 typo :) – wbars

+0

はい。同じ答え、私は重複としてフラグを付けましたが、私は参照してください –

+0

。私が推測する他の解決策の余地はありません。 – wbars

関連する問題