タイトル説明
バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合いることに注意してください。
アイデア:最も簡単な方法は、再帰的に左と右のサブツリーを決定
パブリック クラスソリューション{ ブールisSymmetrical(ツリーノードPROOT) { 場合(PROOT == NULL ){ 戻り 真。 } 戻り裁判官(pRoot.left、pRoot.right)。 } プライベート ブール裁判官(ツリーノードは、ツリーノードの右を左){ 場合(左== NULL &&右== NULLを)返す 真。 もし(左== nullの ||右== nullの)リターン はfalse ; もし(left.val = right.val!)のリターン はfalse ; リターン裁判官(left.left、right.right)&& 裁判官(left.right、right.left)。 } }
二つのアイデア:左と右のサブツリーのペアを格納するため、保証を得るためにスタックペアで撮影したミラー素子と比較しています
キューは、アクセスデータへのキューかもしれ
輸入java.util.Stackを; パブリック クラスソリューション{ ブールisSymmetrical(ツリーノードPROOT) { 場合(PROOT == NULL)を返す 真。 スタック <のTreeNode>スタック= 新しいスタック<> (); stack.push(pRoot.left)。 stack.push(pRoot.right)。 しばらく(!stack.isEmpty()){ TreeNodeを右 = stack.pop(); ツリーノードは、左 = )(stack.pop。 もし(左== nullの &&右== nullを)継続; もし(左== nullの ||右== nullの)リターン はfalse ; もし(!left.val = right.val)のリターン はfalse ; stack.push(left.left)。 stack.push(right.right)。 stack.push(left.right)。 stack.push(right.left)。 } を返す 真。 } }