トピック:
バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合いることに注意してください。
分析:
左と右のサブツリーをすることができ、比較を開始するには、ルートから再帰的に。現在のノードの二つのノードを比較することは、バイナリツリーが対称であるか否かを判断するため、次の比較は、再帰的に行われ、現在のノードについて同じ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)。 } }