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

Pythonのリーフから始まる最小の文字列


二分木のルートがあり、各ノードに0から25までの値が含まれているとします。これらの値は、文字「a」から「z」を表します。値0は「a」を表し、値1は「b」を表します。 '、 等々。このツリーの葉で始まり、ルートで終わる辞書式順序で最小の文字列を検索する必要があります。したがって、ツリーが次のような場合-

Pythonのリーフから始まる最小の文字列


シーケンスが[0,3,25]

であるため、出力は「adz」になります。

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

  • 次のようにdfsトラバーサルメソッドを定義します

  • ノードがnullでない場合、

    • ノード値を文字としてA

      に挿入します
    • ノードに左右の子がない場合、

      • ans:=逆形式の文字列としての最小のansおよびA要素

      • Aから最後の要素を削除します

      • 戻る

    • dfs(ノードの左側、A)を実行します

    • dfs(ノードの右側、A)を実行します

    • Aから最後の要素を削除する

    • 戻る

  • 実際の方法は次のようになります-

  • ans:=“〜”

  • dfs(root、Aとしての空の配列)を呼び出します

  • ansを返す

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

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      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
class Solution(object):
   def smallestFromLeaf(self, root):
      self.ans = "~"
      self.dfs(root,[])
      return self.ans
   def dfs(self, node, A):
      if node:
         A.append(chr(node.data + ord('a')))
         if not node.left and not node.right:
            self.ans = min(self.ans, ''.join(reversed(A)))
            A.pop()
            return
      self.dfs(node.left,A)
      self.dfs(node.right,A)
      A.pop()
      return
root = make_tree([25,1,3,1,3,0,2])
ob = Solution()
print(ob.smallestFromLeaf(root))

入力

[25,1,3,1,3,0,2]

出力

adz

  1. Pythonでバイナリツリーから文字列を構築する

    バイナリツリーがあると仮定します。文字列は、前順序トラバース方法を使用して、バイナリツリーからの括弧と整数で構成されます。 nullノードは、空の括弧のペア「()」で表されます。また、文字列と元の二分木の間の1対1のマッピング関係に影響を与えない空の括弧のペアをすべて省略する必要があります。 したがって、入力が次のような場合 その場合、出力は5(6()(8))(7)になります。 これを解決するには、次の手順に従います- ans:=空白の文字列 関数pot()を定義します。これはノードを取ります、s nullの場合、 空白の文字列を返す ノードの左側または右側がnullの

  2. Pythonプログラムで文字列からn番目の文字を削除する

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 文字列が与えられたので、与えられた文字列からi番目のインデックス付き文字を削除して表示する必要があります。 Pythonのどの文字列でも、インデックス付けは常に0から始まります。文字列「tutorialspoint」があるとすると、そのインデックス付けは次のように行われます- T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 次に、ステートメントを解決するためのPythonスクリプトgを見てみましょう- 例 def remove(str