対称バイナリツリー - 安全プランを証明します

タイトル説明

バイナリツリーが対称でないかを決定するために使用され、機能を実装してください。バイナリ画像は対称としてこの同じ定義を持つバイナリツリーである場合いることに注意してください。
 
アイデア:最も簡単な方法は、再帰的に左と右のサブツリーを決定
パブリック クラスソリューション{
     ブール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)。
        } 
        を返す 
    } 
}

 

おすすめ

転載: www.cnblogs.com/nlw-blog/p/12466807.html