LeetCode-python 101.対称バイナリツリー
難易度:シンプルタイプ:バイナリツリー
バイナリツリーを指定して、それがミラー対称であるかどうかを確認します。
たとえば、バイナリツリー[1,2,2,3,4,4,3]は対称です。
1
/ \
2 2
/ \ / \
3 4 4 3
ただし、次の[1,2,2、null、3、null、3]はミラー対称ではありません。
1
/ \
2 2
\ \
3 3
問題解決のアイデア
この質問を、ルートノードの左側と右側のサブツリーがミラー対称であるかどうかに変えます。
2つのツリーが互いにミラーリングするための条件は次のとおりです。
- それらのルートノードは同じ値を持っています
- 各ツリーの左側のサブツリーは、別のツリーの右側のサブツリーと鏡像対称です
コードの実装
#バイナリツリーノードの定義。 #クラスのTreeNode: # デフ__init __(自己、X): # self.val = X # self.left =なし # self.right =なし クラスソリューション: デフCONVERS(自己、P、Q): もし P ==なしと Q == なし: リターン真 のelifの P ==なしまたは Q == なし: リターン偽 のelif p.val == q.val: リターン self.convers(p.left、q.right)and self.convers(p.right、q.left) else : return False def isSymmetric(self、root:TreeNode)-> bool: if root: return self.convers(root.left、root.right) else : return True
LeetCode-python 104.バイナリツリーの最大深度
難易度:単純タイプ:二分木、再帰
バイナリツリーを指定して、その最大深度を見つけます。
バイナリツリーの深さは、ルートノードから最も遠いリーフノードまでの最長パス上のノード数です。
バイナリツリーの例[3,9,20、null、null、15,7]
3
/ \
9 20
/ \
15 7
問題解決のアイデア
最大深さは、サブツリーのサブツリーを再帰的に調べて、左または右のサブツリーの深さの+1の大きい方です
コードの実装
#バイナリツリーノードの定義。 #クラスのTreeNode: # デフ__init __(自己、X): # self.val = X # self.left =なし # self.right =なし クラスソリューション: デフ MAXDEPTH(自己、ルート:ツリーノード) - > int型: 場合はルートがありますなし: 0を 返すelse : l = self.maxDepth(root.left) r = self.maxDepth(root.right) return max(l、r)+1