二分探索木で最小要素と最大要素を見つけるPythonプログラム
二分探索木で最小要素と最大要素を見つける必要がある場合は、二分木クラスが作成され、ツリーに要素を追加するメソッド、特定のノードの検索が定義されます。クラスのインスタンスが作成され、これらのメソッドで使用されます。
以下は同じのデモンストレーションです-
例
class BST_Node: def __init__(self, key): self.key = key self.left = None self.right = None self.parent = None def insert_elem(self, node): if self.key > node.key: if self.left is None: self.left = node node.parent = self else: self.left.insert_elem(node) elif self.key < node.key: if self.right is None: self.right = node node.parent = self else: self.right.insert_elem(node) def search_node(self, key): if self.key > key: if self.left is not None: return self.left.search_node(key) else: return None elif self.key < key: if self.right is not None: return self.right.search_node(key) else: return None return self class BSTree: def __init__(self): self.root = None def add_elem(self, key): new_node = BST_Node(key) if self.root is None: self.root = new_node else: self.root.insert_elem(new_node) def search_node(self, key): if self.root is not None: return self.root.search_node(key) def get_smallest_elem(self): if self.root is not None: current = self.root while current.left is not None: current = current.left return current.key def get_largest_elem(self): if self.root is not None: current = self.root while current.right is not None: current = current.right return current.key my_instance = BSTree() print('Menu (Assume no duplicate keys)') print('add ') print('smallest') print('largest') print('quit') while True: my_input = input('What operation would you perform ? ').split() operation = my_input[0].strip().lower() if operation == 'add': key = int(my_input[1]) my_instance.add_elem(key) if operation == 'smallest': smallest = my_instance.get_smallest_elem() print('The smallest element is : {}'.format(smallest)) if operation == 'largest': largest = my_instance.get_largest_elem() print('The largest element is : {}'.format(largest)) elif operation == 'quit': break
出力
Menu (Assume no duplicate keys) add <key> smallest largest quit What operation would you perform ? add 5 What operation would you perform ? add 8 What operation would you perform ? add 11 What operation would you perform ? add 0 What operation would you perform ? add 3 What operation would you perform ? smallest The smallest element is : 0 What operation would you perform ? largest The largest element is : 11 What operation would you perform ? quit’
説明
-
必要な属性を持つ「BST_Node」クラスが作成されます。
-
左、右、親ノードを「なし」に設定するために使用される「init」関数があります。
-
バイナリツリーに要素を挿入するのに役立つ「insert_element」メソッドがあります。
-
ツリー内の特定のノードを検索する「search_node」という名前の別のメソッド。
-
「BSTree」という名前の別のクラスが定義されており、ルートは「None」に設定されています。
-
ツリーに要素を追加する「add_elem」という名前のメソッドが定義されています。
-
ツリー内の特定のノードを検索するのに役立つ「search_node」という名前の別のメソッドがあります。
-
ツリー内の最小ノードをフェッチするのに役立つ「get_smallest_node」という名前の別のメソッドが定義されています。
-
ツリーで最大のノードをフェッチするのに役立つ「get_largest_node」という名前の別のメソッドが定義されています。
-
「BSTree」クラスのオブジェクトが作成されます。
-
ユーザーが選択した操作に基づいて、操作が実行されます。
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま
-
リスト内の最小数を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal