オファー-58を受賞。対称バイナリツリー(C ++ / Javaの)

トピック:

バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合いることに注意してください。

分析:

左と右のサブツリーをすることができ、比較を開始するには、ルートから再帰的に。現在のノードの二つのノードを比較することは、バイナリツリーが対称であるか否かを判断するため、次の比較は、再帰的に行われ、現在のノードについて同じ2つのノードが、左ノード、および現在の左右であることに留意すべきです比較するノードの右ノードは、これは対称的です。

             

手順:

C ++

クラスのソリューション{
 パブリックBOOL isSymmetrical(TreeNodeの* PROOT)
    {
        もし(PROOT == nullptr)
             を返す リターン isSame(pRoot->左、pRoot-> 右)。
    }
    BOOL isSame(ツリーノード* P1、ツリーノード* P2){
         場合(P1 == nullptr && P2 == nullptr)
             を返す もし(P1 == nullptr || P2 == nullptr)
             のリターン はfalse ;
        もし(!P1->ヴァル= P2-> val)で
             のリターン はfalse ;
        返す isSame(P1->左、P2->右)&& isSameを(P1->右、P2-> 左)。
    }

}。

ジャワ

パブリック クラスソリューション{
     ブールisSymmetrical(ツリーノードPROOT)
    {
        もし(PROOT == nullを返します リターンisSame(pRoot.left、pRoot.right)。
    }
    ブールisSame(ツリーノードP1、P2のTreeNode){
         場合(P1 == NULL && P2 == NULL を返す もし(P1 == nullの || P2 == nullのリターン はfalse ;
        もし(!p1.val = p2.val)
             のリターン はfalse ;
        リターン isSame(p1.left、p2.right)&& isSame(p1.right、p2.left)。
    }
}

おすすめ

転載: www.cnblogs.com/silentteller/p/12114934.html