Python Code Example with Syntax Highlighting
excel_to_html_editer
二分探索木の実装(テスト)
# ノードクラス
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
# 二分探索木クラス
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self, key):
if self.root is None:
self.root = Node(key)
else:
self._insert(self.root, key)
def _insert(self, current_node, key):
if key < current_node.val:
if current_node.left is None:
current_node.left = Node(key)
else:
self._insert(current_node.left, key)
else:
if current_node.right is None:
current_node.right = Node(key)
else:
self._insert(current_node.right, key)
def search(self, key):
return self._search(self.root, key)
def _search(self, current_node, key):
if current_node is None or current_node.val == key:
return current_node
if key < current_node.val:
return self._search(current_node.left, key)
else:
return self._search(current_node.right, key)
def inorder(self):
self._inorder(self.root)
def _inorder(self, current_node):
if current_node:
self._inorder(current_node.left)
print(current_node.val, end=" ")
self._inorder(current_node.right)
def print_tree(self, node, level=0, prefix="Root: "):
if node is not None:
print(" " * (level * 4) + prefix + str(node.val))
if node.left:
self.print_tree(node.left, level + 1, "L--- ")
if node.right:
self.print_tree(node.right, level + 1, "R--- ")
bst = BinarySearchTree()
keys = [20, 10, 30, 5, 15, 25, 35]
for key in keys:
bst.insert(key)
bst.print_tree(bst.root)
二分探索木、xlsxデータ取り込みツリー表示
import pandas as pd
# ノードクラス
class Node:
def __init__(self, key, name, gender):
self.left = None
self.right = None
self.val = key
self.people = [(name, gender)] # 名前と性別をタプルで保持
# 二分探索木クラス
class BinarySearchTree:
def __init__(self):
self.root = None
# ノードを挿入する関数
def insert(self, key, name, gender):
if self.root is None:
self.root = Node(key, name, gender)
else:
self._insert(self.root, key, name, gender)
def _insert(self, current_node, key, name, gender):
if key == current_node.val:
# 同じキーの場合は名前と性別のペアを追加
current_node.people.append((name, gender))
elif key < current_node.val:
if current_node.left is None:
current_node.left = Node(key, name, gender)
else:
self._insert(current_node.left, key, name, gender)
else:
if current_node.right is None:
current_node.right = Node(key, name, gender)
else:
self._insert(current_node.right, key, name, gender)
# 二分探索木内の探索
def search(self, key):
return self._search(self.root, key)
def _search(self, current_node, key):
if current_node is None:
return None
if current_node.val == key:
return current_node.people # 名前と性別のリストを返す
if key < current_node.val:
return self._search(current_node.left, key)
else:
return self._search(current_node.right, key)
# 中間順巡回(in-order traversal)
def inorder(self):
self._inorder(self.root)
def _inorder(self, current_node):
if current_node:
self._inorder(current_node.left)
for person in current_node.people:
print(f"{current_node.val}: {person[0]} ({person[1]})", end=" ") # 名前と性別を表示
self._inorder(current_node.right)
# 木の分岐構造を表示する関数
def print_tree(self, node, level=0, prefix="Root: "):
if node is not None:
print(" " * (level * 4) + prefix + str(node.val) + " " + ", ".join([f"{name} ({gender})" for name, gender in node.people]))
if node.left:
self.print_tree(node.left, level + 1, "L--- ")
if node.right:
self.print_tree(node.right, level + 1, "R--- ")
# エクセルファイルからデータを読み込む
excel_file_path = 'your_excel_file_path.xlsx' # 実際のエクセルファイルパスに変更
df = pd.read_excel(excel_file_path)
# DataFrameの指定した列だけをリストに変換
keys_and_people = df[['Key', 'Name', 'Gender']].values.tolist()
# 二分探索木の動作テスト
bst = BinarySearchTree()
# ノードを挿入
for key, name, gender in keys_and_people:
bst.insert(key, name, gender)
# 木の構造を表示
print("\n二分探索木の分岐構造:")
bst.print_tree(bst.root)
# 中間順巡回の結果
print("\n二分探索木の中間順巡回 (数値、名前、性別の対応):")
bst.inorder()
# ユーザー入力による探索
search_value = int(input("\n探索したい数値を入力してください: "))
result = bst.search(search_value)
if result:
print(f"{search_value} に対応する人物:")
for name, gender in result:
print(f"名前: {name}, 性別: {gender}")
else:
print(f"{search_value} に対応する人物は見つかりません。")