linked list
class Node:
     def __init__(self, data):
         self.data = data
         self.next = None
 # Linked List class
 class LinkedList:
     def __init__(self):
         self.first = None
         self.last = None    # Keep reference to the last node
     # Insert n nodes with user input
     def insert(self, n):
         for i in range(1, n + 1):
             data = int(input(f"Enter value for node {i}: "))
             new_node = Node(data)
             if self.first is None: # first node
                 self.first = new_node
                 self.last = new_node
             else: # attach directly using last reference
                 self.last.next = new_node
                 self.last = new_node
     # Display all nodes
     def display(self):
         temp = self.first
         while temp:
             print(temp.data, end=" -> ")
             temp = temp.next
         print("None")
 ll = LinkedList()
 n = int(input("How many nodes do you want to insert? "))
 ll.insert(n)
 print("Linked List:")
 ll.display()
Binary tree
 class Node:
     def __init__(self, data):
         self.data = data
         self.left = None
         self.right = None
 # BST class
 class BST:
     def __init__(self):
         self.root = None
     # Non-recursive insert
     def insert(self, data):
         new_node = Node(data)
         if self.root is None:
             self.root = new_node
             return
         current = self.root
         parent = None
         while current:
             parent = current
             if data < current.data:
                 current = current.left
               else:
                   current = current.right
         if data < parent.data:
             parent.left = new_node
         else:
             parent.right = new_node
     # Create BST by taking input from user
     def create_bst(self):
         n = int(input("How many values do you want to insert? "))
         for i in range(1, n + 1):
             value = int(input(f"Enter value {i}: "))
               self.insert(value)
    # In-order Traversal (recursive)
    def inorder(self, root):
        if root:
            self.inorder(root.left)
            print(root.data, end=" ")
              self.inorder(root.right)
# Main code
bst = BST()
bst.create_bst()
print("\nIn-order Traversal of BST:")
bst.inorder(bst.root)
print()