インオーダートラバーサルを使用してツリー内の最大値を見つけるPythonプログラム
順序トラバーサルを使用してツリー内の最大値を見つける必要がある場合、ルート要素を設定したり、再帰を使用して順序トラバーサルを実行したりするメソッドを使用して、バイナリツリークラスが作成されます。
クラスのインスタンスが作成され、メソッドにアクセスするために使用できます。
以下は同じのデモンストレーションです-
例
class BinaryTree_Struct:
def __init__(self, key=None):
self.key = key
self.left = None
self.right = None
def set_root(self, key):
self.key = key
def inorder_traversal_largest(self):
largest = []
self.inorder_largest_helper_fun(largest)
return largest[0]
def inorder_largest_helper_fun(self, largest):
if self.left is not None:
self.left.inorder_largest_helper_fun(largest)
if largest == []:
largest.append(self.key)
elif largest[0] < self.key:
largest[0] = self.key
if self.right is not None:
self.right.inorder_largest_helper_fun(largest)
def insert_to_left(self, new_node):
self.left = new_node
def insert_to_right(self, new_node):
self.right = new_node
def search_elem(self, key):
if self.key == key:
return self
if self.left is not None:
temp = self.left.search_elem(key)
if temp is not None:
return temp
if self.right is not None:
temp = self.right.search_elem(key)
return temp
return None
my_instance = None
print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('largest')
print('quit')
while True:
my_input = input('What operation would you do ? ').split()
operation = my_input[0].strip().lower()
if operation == 'insert':
data = int(my_input[1])
new_node = BinaryTree_Struct(data)
suboperation = my_input[2].strip().lower()
if suboperation == 'at':
my_instance = new_node
else:
position = my_input[4].strip().lower()
key = int(position)
ref_node = None
if my_instance is not None:
ref_node = my_instance.search_elem(key)
if ref_node is None:
print('No such key exists')
continue
if suboperation == 'left':
ref_node.insert_to_left(new_node)
elif suboperation == 'right':
ref_node.insert_to_right(new_node)
elif operation == 'largest':
if my_instance is None:
print('The tree is empty')
else:
print('The largest element is : {}'.format(my_instance.inorder_traversal_largest()))
elif operation == 'quit':
break 出力
Menu (this assumes no duplicate keys) insert <data> at root insert <data> left of <data> insert <data> right of <data> largest quit What operation would you do ? insert 8 at root What operation would you do ? insert 9 left of 8 What operation would you do ? insert 4 right of 8 What operation would you do ? largest The largest element is : 9 What operation would you do ? > Use quit() or Ctrl-D (i.e. EOF) to exit
説明
-
必要な属性を持つ「BinaryTree_struct」クラスが作成されます。
-
左右のノードを「なし」に設定するために使用される「init」関数があります。
-
バイナリツリーのルートを設定するのに役立つ「set_root」メソッドがあります。
-
再帰を使用して順序どおりの走査を実行する「inorder_traversal_largest」という名前の別のメソッド。
-
したがって、ヘルパー関数が一緒に定義されています。
-
ルートノードの右側に要素を追加するのに役立つ「insert_to_right」という名前の別のメソッドが定義されています。
-
ルートノードの左側に要素を追加するのに役立つ「insert_to_left」という名前のメソッドが定義されています。
-
「search_elem」という名前のメソッドが定義されており、特定の要素の検索に役立ちます。
-
「BinaryTree_struct」クラスのオブジェクトが作成されます。
-
実行する必要のある操作に対してユーザー入力が行われます。
-
ユーザーの選択に応じて、操作が実行されます。
-
関連する出力がコンソールに表示されます。
-
Pythonでn-aryツリーのルートを見つけるプログラム
配列内のn-aryツリーのノードが与えられたとします。ツリーを再構築して、ツリーのルートノードを見つけて返す必要があります。返されたノードから、ツリー全体をプレオーダー表記で表示する必要があります。 したがって、入力が次のような場合 その場合、出力は次のようになります [14, 27, 32, 42, 56, 65] ツリーのルートを使用して、ツリーのプレオーダートラバーサルを表示します。したがって、出力はツリーのプレオーダートラバーサルです。 これを解決するには、次の手順に従います- indegree:=整数値を含む新しいマップ ツリー内のノードごとに、実行します
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n): #maximum element max = arr[0] # traverse the whole loop for