1つのタイトル説明
バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合ことに留意されたいです。
2つのアイデアや方法
:対称、行きがけ;その後、左、右の子ノードトラバーサル子ノードを横断する、トラバーサルアルゴリズムを定義します>右の子ノード- -ルート>左の子ノード ; 及び前順:ルート- >子ノード左- >右の子ノードを、バイナリツリーと対称配列先行順走査の比較先行順走査により二分木が同じ対称性であるかどうかを決定します。注意味:バイナリの要素はすべて同じである可能性があるので、それも考慮に入れnullptr中に横断します。
3 C ++コアコード
1 / * 2 構造体のTreeNode { 3 int型のval; 4 構造体のTreeNode *左; 5 右側の構造体のTreeNode *; 6 ツリーノード(int型X): 7 左のval(X)、(NULL)、右(NULL){ 8 } 9 }。 10 * / 11 クラスソリューション{ 12 公共: 13 BOOL isSymmetrical(ツリーノード* PROOT) 14 { 15 リターンissymmetrical(PROOT、PROOT)。 16 } 17 18 //比較のバイナリツリー先行順走査シーケンス(ルート- >左- >右)と対称先行順配列(ルート- >右- >左)、等しい場合、対称的な 19 BOOLの issymmetrical(ツリーノード* pRoot1、ツリーノード* pRoot2){ 20は、 21である IF(pRoot1 == NULL && pRoot2 == NULL) 22が 戻り trueに ; // すべての要素が同じである場合があるので、nullptr考えトラバーサルシーケンス 23をれる 24 // ヌルポインタ、別の非ヌルポインタ 25 IF(pRoot1 == NULL || pRoot2 == NULL) 26は、 戻り falseに、 27 28 IF(pRoot1->ヴァル= pRoot2->!ヴァル) 29 リターン falseに、 30 31は リターン(pRoot1->左、pRoot2-> issymmetrical(pRoot1->右、pRoot2->左)&& issymmetrical 右)。 32 } 33 }。
参考資料
https://blog.csdn.net/zjwreal/article/details/89282964