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

Pythonを使用して2つの式ツリーが同等であるかどうかを確認するプログラム


2つの式ツリーが提供されているとします。 2つの式ツリーをチェックし、式ツリーが同様の値を生成するかどうかを判断するプログラムを作成する必要があります。 2つの式ツリーは順番に提供され、一致する場合はTrue値を返し、一致しない場合はFalse値を返します。

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

Pythonを使用して2つの式ツリーが同等であるかどうかを確認するプログラム

その場合、出力はTrueになります。

2つの式ツリーは同じ値に評価されます。

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

  • 関数dfs()を定義します。これはノード、dicを取ります

    • ノードが空の場合、

      • 戻る

    • ノードの左側とノードの右側が空でない場合、

      • dic [ノードの値]:=dic[ノードの値]+1

    • dfs(ノードの左側、dic)

    • dfs(ノードの右側、dic)

  • dic1:=整数値を含む新しいマップ

  • dic2:=整数値を含む新しいマップ

  • dfs(root1、dic1)

  • dfs(root2、dic2)

  • dic1がdic2と同じ場合はTrueを返します。


import collections
class TreeNode:
   def __init__(self, val=0, left=None, right=None):
      self.val = val
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
def solve(root1, root2):
   dic1 = collections.defaultdict(int)
   dic2 = collections.defaultdict(int)
   def dfs(node, dic):
      if not node:
         return
      if not node.left and not node.right:
         dic[node.val] += 1
      dfs(node.left, dic)
      dfs(node.right, dic)
   dfs(root1, dic1)
   dfs(root2, dic2)
   return dic1 == dic2
root1 = make_tree([1, '+', 2, '*', 3, '+', 4 ])
root2 = make_tree([2, '+', 1, '*', 4, '+', 3])
print(solve(root1, root2))

入力

root1 = make_tree([1, '+', 2, '*', 3, '+', 4 ])
root2 = make_tree([2, '+', 1, '*', 4, '+', 3])

出力

True

  1. Pythonを使用してバイナリツリーの右側のノードを見つけるプログラム

    バイナリツリーが提供されているとします。また、ノード(「u」という名前)へのポインターが与えられ、提供されたノードのすぐ右にあるノードを見つける必要があります。特定のノードの右側にあるノードは同じレベルにとどまる必要があり、特定のノードはリーフノードまたは内部ノードのいずれかになります。 したがって、入力が次のような場合 u =6の場合、出力は8になります。 ノード6の右側にあるノードはノード8であるため、値8が返されます。 これを解決するには、次の手順に従います- ルートが空の場合、 nullを返す dq:=新しい両端キュー dqの最後にルートを挿入

  2. カットされたキューブの数を調べるPythonプログラム

    次元a、b、およびcのいくつかの立方体があり、それらを使用して、次元axbxcの新しいボックスが作成されたとします。 a、b、およびcは互いに素です。 gcd(a、b)=gcd(b、c)=gcd(c、d)=1.図に示すように、ボックスを1つのスライスで2つに切断する必要があります。箱がこのようにカットされているかどうか、いくつの立方体が2つのピースにカットされているかを確認する必要があります。可能な3次元を含む配列が提供されており、そこから答えを見つける必要があります。 カットは、頂点P、Q、およびRを通過する平面になるようにこのように行われます。 したがって、入力がn =3、inp