[59]安全オファーを証明:対称バイナリツリー

タイトル説明

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

ソリューション:再帰
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输出:

 

おすすめ

転載: www.cnblogs.com/Blog-cpc/p/12362060.html