Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの二分木で2つの要素に共通する祖先を見つけるプログラム


二分木があり、2つの数値aとbもあるとすると、aとbを子孫として持つ最下位ノードの値を見つける必要があります。ノードはそれ自体の子孫になる可能性があることに注意する必要があります。

したがって、入力が次のような場合

Pythonの二分木で2つの要素に共通する祖先を見つけるプログラム

a =6、b =2の場合、出力は4

になります。

これを解決するには、次の手順に従います-

  • メソッドsolve()を定義します。これはルートを取り、a、b

  • ルートがnullの場合、

    • -1を返す

  • ルートの値がaまたはbの場合、

    • ルートの戻り値

  • 左:=solve(ルートの左、a、b)

  • right:=resolve(right of root、a、b)

  • 左または右が-1でない場合、

    • ルートの戻り値

  • 左が-1と同じでない場合は左に戻り、そうでない場合は右

  • メインメソッド呼び出しからsolve(root)

理解を深めるために、次の実装を見てみましょう-

class TreeNode:
   def __init__(self, val, left=None, right=None):
      self.val = val
      self.left = left
      self.right = right

class Solution:
   def solve(self, root, a, b):
      if not root:
         return -1
      if root.val in (a, b):
         return root.val
      left = self.solve(root.left, a, b)
      right = self.solve(root.right, a, b)
      if -1 not in (left, right):
         return root.val
      return left if left != -1 else right
ob = Solution()
root = TreeNode(3)
root.left = TreeNode(10)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(6)
print(ob.solve(root, 6, 2))
>

入力

root = TreeNode(3)
root.left = TreeNode(10)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(6)
6, 2

出力

4

  1. Pythonのバイナリツリーの最も低い共通の祖先

    二分木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[3,5,1,6,2,0,8、null、null、7,4]のような場合。ツリーは次のようになります- ここで、5と1のLCAは3です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用したル

  2. Pythonのバイナリ検索ツリーの最も低い共通の祖先

    二分探索木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[6、2、8、0、4、7、9、null、null、3、5]のような場合。ツリーは次のようになります- ここで、2と8のLCAは6です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用し