Xây cây nhị phân, thêm nút trái/phải, sau đó in inorder của cây con trái.
Ví dụ
class BinaryTree:
def __init__(self, data):
self.key = data
self.left = None
self.right = None
def inorder(self):
if self.left:
self.left.inorder()
print(self.key, end=' ')
if self.right:
self.right.inorder()
def insert_left(self, node):
self.left = node
def insert_right(self, node):
self.right = node
def search(self, key):
if self.key == key:
return self
if self.left:
res = self.left.search(key)
if res: return res
if self.right:
return self.right.search(key)
return None
def print_left_subtree(self):
if self.left:
self.left.inorder()
# Demo
root = None
while True:
cmd = input("Cmd (insert/left/quit): ").split()
if not cmd: continue
if cmd[0] == 'insert':
val = int(cmd[1])
node = BinaryTree(val)
if cmd[2] == 'at':
root = node
else:
parent = root.search(int(cmd[4]))
if parent:
if cmd[2] == 'left':
parent.insert_left(node)
else:
parent.insert_right(node)
elif cmd[0] == 'left':
if root:
print("Cây con trái (inorder):", end=' ')
root.print_left_subtree()
print()
elif cmd[0] == 'quit':
break
Kết quả
Cmd (insert/left/quit): insert 5 at root Cmd (insert/left/quit): insert 6 left of 5 Cmd (insert/left/quit): insert 8 right of 5 Cmd (insert/left/quit): left Cây con trái (inorder): 6 Cmd (insert/left/quit): quit
Giải thích
- Class
BinaryTreevới left, right. print_left_subtreegọi inorder trênself.left.- Inorder: left, root, right -> in các nút cây con trái theo thứ tự tăng dần (nếu BST).
- Menu: insert at root, insert left/right of key, left (in cây con trái), quit.