インオーダートラバーサルを使用してツリー内の最大値を見つける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