Leetcodeバイナリツリーアルゴリズム

 

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つのツリーが互いにミラーリングするための条件は次のとおりです。

 

  1. それらのルートノードは同じ値を持っています
  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

 

 

おすすめ

転載: www.cnblogs.com/xinghaiyige/p/12700964.html