Post thumbnail
PYTHON

Mastering Binary Trees with Python – Finding the Smallest Node

By Suman Gangopadhyay

Table of contents


  1. Introduction
    • Why Binary Trees?
    • Setting Up
    • The Road Ahead
  2. Finding the the smallest Node inside Binary Tree
    • Code Breakdown
    • Main Execution:
  3. Conclusion

Introduction

What makes binary trees so essential in programming? Is it their efficiency, their versatility, or their role in optimizing searches? The answer is –  all of the above. Binary trees form the backbone of many real-world applications, from database indexing to artificial intelligence. Understanding their structure and operations isn’t just an academic exercise; it’s a valuable skill for any developer dealing with hierarchical data.

In this blog, we’ll focus on one of the core operations of binary trees: finding the smallest node. Along the way, we’ll also explore other fundamental tasks like identifying the largest node and extracting even and odd nodes, all using Python. Whether you’re looking to sharpen your algorithmic thinking or implement practical tree-based solutions, this deep dive into binary trees will give you a solid foundation to build on.

Why Binary Trees?

Before we dive into the code, let’s take a moment to appreciate why binary trees matter. A binary tree is a hierarchical structure with nodes connected in a parent-child relationship. Each node can have, at most, two children, referred to as the left child and the right child. This simple structure allows binary trees to represent sorted data efficiently, making them ideal for search operations. Their balanced variants, like AVL trees and Red-Black trees, ensure that these operations remain efficient even as the tree grows.

Setting Up

For this tutorial, we’ll be using Python—a language renowned for its readability and robust standard library. We’ll start by defining a basic binary tree structure and then implement functions to find the smallest node, the largest node, all even nodes, and all odd nodes. By the end of this blog, you’ll have a clear, actionable understanding of these operations, supported by practical code examples.

The Road Ahead

  1. Defining the Binary Tree Structure: We’ll start by creating a Node class to represent each node in the tree and a BinaryTree class to manage the tree operations.
  2. Finding the Smallest Node: A function that traverses the tree to find and return the smallest value.
  3. Finding the Largest Node: Similarly, a function that identifies the largest value in the tree.
  4. Extracting Even Nodes: A traversal function to collect all nodes with even values.
  5. Extracting Odd Nodes: Another function to collect all nodes with odd values.

Each section will include detailed explanations and Python code snippets to help you follow along and implement these functions on your own. By the end of this blog, you’ll not only understand these specific operations but also gain insights into more advanced tree manipulation techniques.

So, let’s roll up our sleeves and get ready to explore the depths of binary trees with Python. Whether you’re optimizing a search algorithm or managing hierarchical data, these foundational techniques will serve you well. Happy coding!

Feel free to expand on each section in the blog to provide more in-depth information and code examples. If you need further assistance or more details just let me know! 

Finding the the smallest Node inside Binary Tree

This Python code demonstrates the creation and management of a binary tree, including the insertion of nodes, printing the tree structure, and finding the smallest node. The code defines classes for tree nodes and the binary tree itself, providing a method to traverse the tree and determine the smallest node value.

Let us see the code first 

“””

Using Python, write a python to Create a Binary Tree whose Root Node is 252.

Under Root Node there will be two child nodes 21 and 56.

Now, insert node 49 and 98 inside node 21 and 189 and 1 inside node 56.

Under node 1 insert node 22 and 41 and under node 49 insert node 102 and 103.

Find the smallest node or element from the binary tree.

“””

class Node:    

    def __init__(self, val):

        self.val = val

        self.right = None

        self.left = None

class SumanBinaryTree:

    def __init__(self):

        self.root = None

    def insert_node(self, data):

        if self.root is None:

            self.root = Node(data)

        else:

            self.__insert__recursive(self.root, data)

    def __insert__recursive(self, node, data):

        if data < node.val:

            if node.left is None:

                node.left = Node(data)

            else:

                self.__insert__recursive(node.left, data)

        else:

            if node.right is None:

                node.right = Node(data)

            else:

                self.__insert__recursive(node.right, data)

    def print_tree(self, node, level=0):        

        if node is not None:

            self.print_tree(node.right, level + 1)

            print(‘ ‘ * 4 * level + ‘->’, node.val)

            self.print_tree(node.left, level + 1)

    # Method to find the smallest node

    def find_smallest_node(self, node):

        if node is None:

            return None

        largest = node.val

        left_largest = self.find_smallest_node(node.left)

        right_largest = self.find_smallest_node(node.right)

        if left_largest and left_largest < largest:

            largest = left_largest

        if right_largest and right_largest < largest:

            largest = right_largest

        return largest

# Create the binary tree as per the instructions

tree = SumanBinaryTree()

tree.insert_node(252)

tree.insert_node(21)

tree.insert_node(56)

tree.insert_node(49)

tree.insert_node(98)

tree.insert_node(189)

tree.insert_node(1)

tree.insert_node(22)

tree.insert_node(41)

tree.insert_node(102)

tree.insert_node(103)

# Print the tree structure

tree.print_tree(tree.root)

# Find and print the smallest node

print(“The smallest node in the tree is:”, tree.find_smallest_node(tree.root))

MDN

Code Breakdown

Class Node:

  • Represents a single node in the binary tree.
  • Attributes:
    • val: Stores the value of the node.
    • left: Pointer to the left child node.
    • right: Pointer to the right child node.

Class SumanBinaryTree:

  • Represents the binary tree.
  • Attributes:
    1. root: Pointer to the root node of the tree.
  • Methods:
    1. insert_node(data):
      • Inserts a new node with the given data into the binary tree.
      • If the tree is empty, it creates a new root node.
      • Otherwise, recursively inserts the node at the appropriate position based on its value:
        • If data is less than the current node’s value, insert it in the left subtree.
        • If data is greater than or equal to the current node’s value, insert it in the right subtree.
    2. __insert__recursive(node, data):
      • Recursive helper function for inserting a node.
      • Compares data with the current node’s value and recursively inserts it in the left or right subtree based on the comparison.
    3. print_tree(node, level=0):
      • Prints the tree in a hierarchical format, with each level indented.
      • Recursively traverses the tree, printing the right subtree first, then the current node, and finally the left subtree.
    4. find_smallest_node(node):
      • Finds the smallest node in the subtree rooted at the given node.
      • Recursively traverses the tree, comparing the current node’s value with the smallest values in its left and right subtrees.
      • Returns the smallest value found.

Main Execution:

  1. Create a Binary Tree:
    • An instance of SumanBinaryTree is created.
    • Nodes with values 252, 21, 56, 49, 98, 189, 1, 22, 41, 102, and 103 are inserted into the tree using the insert_node method.
  2. Print the Tree:
    • The print_tree method is called to visualize the structure of the binary tree.
  3. Find the Smallest Node:
    • The find_smallest_node method is called on the root node to find the smallest value in the entire tree.
    • The result is printed to the console.

The Output

 The Output

Ready to take your tech career to the next level with Python? GUVI’s Python Course is perfect for all skill levels, offering an in-depth curriculum, hands-on projects, and expert mentorship. Gain the knowledge and skills needed to succeed in exciting fields like AI, Data Science, and Web Development. Start your path to career transformation with Python today!

MDN

Conclusion

Mastering binary tree operations isn’t just about writing code, it’s about developing a structured approach to problem-solving. The ability to traverse and manipulate tree structures efficiently can significantly impact how you handle data-driven applications.

This implementation provides a clear, step-by-step guide to constructing a binary tree, inserting nodes, and retrieving specific values with precision. By experimenting with this code, you can expand its functionality to include additional operations like balancing trees or implementing more advanced search techniques. As you continue exploring binary trees, you’ll uncover deeper insights into optimizing performance and managing structured data more effectively.

Career transition

Did you enjoy this article?

Schedule 1:1 free counselling

Similar Articles

Loading...
Share logo Copy link
Power Packed Webinars
Free Webinar Icon
Power Packed Webinars
Subscribe now for FREE! 🔔
close
Webinar ad
Table of contents Table of contents
Table of contents Articles
Close button

  1. Introduction
    • Why Binary Trees?
    • Setting Up
    • The Road Ahead
  2. Finding the the smallest Node inside Binary Tree
    • Code Breakdown
    • Main Execution:
  3. Conclusion