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

Pythonでツリーの順序が回文であるかどうかを確認するプログラム


各ノードに0〜9の数字が含まれる二分木があるとすると、その順序の走査が回文であるかどうかを確認する必要があります。

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

Pythonでツリーの順序が回文であるかどうかを確認するプログラム

その場合、その順序トラバーサルは[2,6,10,6,2]であるため、出力はTrueになります。

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

  • rootがnullの場合、
    • Trueを返す
  • スタック:=新しいスタック
  • curr:=root
  • 順序:=新しいリスト
  • スタックが空でないか、currがnullでない場合は、
    • currがnullでない場合は、
      • currをスタックにプッシュします
      • curr:=currの左側
    • node:=スタックからポップされた要素
    • 順序の最後にノードの値を挿入
    • curr:=ノードの右側
  • 順序が逆の順序と同じ場合はtrueを返し、それ以外の場合はfalseを返します。

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

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      if not root:
         return True
      stack = []
      curr = root
      inorder = []
      while stack or curr:
         while curr:
            stack.append(curr)
            curr = curr.left
         node = stack.pop() inorder.append(node.val)
         curr = node.right
      return inorder == inorder[::-1]
ob = Solution()
root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)
print(ob.solve(root))

入力

root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)

出力

True

  1. 与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム

    無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります

  2. Pythonで1つの値がBSTに存在するかどうかを確認するプログラム

    二分探索木とvalという別の入力があるとすると、valがツリーに存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 val =7の場合、ツリーに7が存在するため、出力はTrueになります。 これを解決するために、次の手順に従います- 関数solve()を定義します。これはルートになります、val ルートがnullの場合、 Falseを返す ルートのデータがvalと同じ場合、 Trueを返す ルートのデータが