タイトル説明
バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合いることに注意してください。
ソリューション:再帰
1つの パブリック 静的 ブールisSymmetrical(ツリーノードPROOT){ 2 であれば(PROOT == NULL ){ 3 リターン 真。 4 } 5 リターンisSymmetrical(pRoot.left、pRoot.right)。 6 } 7 パブリック 静的 ブールisSymmetrical(ツリーノードは、ツリーノードの右を左){ 8 であれば(左== NULL &&右== NULL ){ 9 リターン 真。 10 } 11 であれば(左== NULL||右== NULL ){ 12 リターン 偽。 13 } 14 であれば(left.val == right.val){ 15 リターン 真。 16 } 17 リターン isSymmetrical(left.left、right.right)&& isSymmetrical(left.right、right.left)。 18 }
初期の木:
1 パブリック 静的 クラスツリーノード{ 2 INTヴァル= 0 。 3 ツリーノードは=左ヌル。 4 ツリーノード右= NULL ; 5 公共のTreeNode(int型のval){ 6 本 .val = ヴァル。 7 } 8 } 9 プライベート 静的リスト<ツリーノード> nodelistと= NULL ; 10 パブリック 静的ツリーノードcreateBinTree(INT []配列){ 11 = nodelistと新しい新規のLinkedList <ツリーノード> (); 12である // 今度は、アレイ内の値は、ツリーノードに変換ノード 13である ため(INT nodeIndex = 0; nodeIndex <Array.lengthとすること; nodeIndex ++ ){ 14 nodeList.add(新しい新しいツリーノード(配列[ nodeIndex])); 15 } 16 // ノードの親バイナリツリーの親ノードの子ノードとデジタルの関係前lastParentIndex-1を確立する 17。 ための(INT parentIndex = 0; parentIndexが<Array.lengthと/ 2である- 1; parentIndex ++ ){ 18 // 左の子 19 nodeList.get(parentIndex).LEFT = nodelistと 図20は、ある に.get(parentIndex 1 * 2 +。 ) 21である // 右の子 22である nodeList.get(parentIndex).RIGHT = nodelistと 23である に.get(parentIndex * 2 + 2 ); 24 } 25 // 最後の親ノード:ファイナルとして親ノードは、そうハンドル析出、右の子ではないかもしれない 26は 、INT。lastParentIndex BE Array.lengthと= / 2から1 ; 27 // 左の子 28 nodeList.get(lastParentIndex).LEFT = nodelistと 29 。に.get(lastParentIndex 1 + 2 * ); 30 // 配列の長さが奇数である場合に右の子のみ、右の子確立 31 もし(Array.lengthと%2 == 1 ){ 32 nodeList.get(lastParentIndex).RIGHT = nodelistと 33 に.get(lastParentIndex * 2 + 2 )。 34 } 35 リターン nodeList.get(0 )。 36 }
テスト:
1つの 公共 静的 ボイドメイン(文字列[]引数){ 2 INT []ツリー= {8,6,6,5,7,7,5 }。 3 ツリーノードPROOT = createBinTree(木) 4 ブール対称= isSymmetrical(PROOT)。 5 のSystem.out.println(対称)。 6 } 7输出:真