タイトル:バイナリーツリー、それは鏡面対称であるかどうかを確認考えます。例えば、バイナリツリーは [1,2,2,3,4,4,3]
対称です。
出典:https://leetcode-cn.com/problems/symmetric-tree/
1幕:独自のコード
アイデア:スタックリアライズ、実際には、キューの実装にもOK、あまり違い、再帰と公式コードです
#バイナリツリーノードの定義A。 クラスのTreeNode: DEF __init__ (セルフ、X): self.val = X self.left = なし self.right = なし #は44ミリ秒、すべてのビート提出のpython3の82.50パーセント:実行ユーザー #のメモリ消費量:12.9メガバイトには、すべてのpython3の提出にユーザーの99.02パーセントを破った クラスのソリューション: DEF isSymmetric(セルフ、ルート:ツリーノード) - > BOOL: DEF (P-、Q)judge_symmetric: IF P-はありませんなしと Q ありませんなし: リターン 2 ELIFの pがあるなしまたは qがありませんなしか(!p.val = q.val): リターン偽 他: リターン真の 場合はルートがあるなし: リターン真の スタック = [] stack.append((root.left、ルート。右)) 一方、スタック: P、Q = stack.pop() RES = judge_symmetric(P、Q) #1を返すことができないという注意は、真である真== 1 IF == RES 2 : パス のelif RES: stack.append((p.left、q.right)) stack.append((p.right、q.left) ) それ以外: リターン偽 リターン真 IF __name__ == ' __main__ ' : duixiang = ソリューション() ルート。=のTreeNode(1 ) A =のTreeNode(2 ) B =のTreeNode(2 ) root.left = A root.right= B a.left =ツリーノード(4 ) a.right =ツリーノード(3 ) b.left =ツリーノード(4 ) b.right =ツリーノード(3 ) A = duixiang.isSymmetric(ルート) プリント()