Basic Binary Tree
Example: Let's create a basic binary tree and perform some operations on it.
# Node class definition
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# Creating a binary tree
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
# Tree traversal - In-order traversal
def inorder_traversal(node):
if node is None:
return
inorder_traversal(node.left)
print(node.value, end=" ")
inorder_traversal(node.right)
# Perform in-order traversal
inorder_traversal(root)
# Output: 4 2 5 1 3
In this example, we define a Node
class that represents a node in the binary tree. Each node has a value and two child pointers (left
and right
) initialized as None
.
We create a binary tree by linking nodes together using the child pointers. In this case, we have a tree with the root value 1, its left child with value 2, its right child with value 3, and further nodes beneath them.
To traverse the binary tree, we define an inorder_traversal
function that performs an in-order traversal. In in-order traversal, we recursively visit the left subtree, print the value of the current node, and then recursively visit the right subtree. The output is the values of the nodes visited in the order: left, root, right.
Let's solve a question using the concept of a basic binary tree. The question is "Binary Tree Maximum Path Sum," which requires finding the maximum path sum in a binary tree.
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class Solution:
def max_path_sum(self, root):
def max_path_sum_helper(node):
nonlocal max_sum
if node is None:
return 0
left_sum = max(max_path_sum_helper(node.left), 0)
right_sum = max(max_path_sum_helper(node.right), 0)
current_sum = node.value + left_sum + right_sum
max_sum = max(max_sum, current_sum)
return node.value + max(left_sum, right_sum)
max_sum = float('-inf')
max_path_sum_helper(root)
return max_sum
# Create an instance of Solution
solution = Solution()
# Create a binary tree
root = Node(1)
root.left = Node(2)
root.right = Node(3)
# Check the maximum path sum
print(solution.max_path_sum(root))
# Output: 6
In this solution, we define a Node
class to represent a node in the binary tree. We also define a Solution
class that contains the max_path_sum
method to find the maximum path sum in the binary tree.
The max_path_sum
method uses a helper function max_path_sum_helper
to recursively calculate the maximum path sum starting from each node. It computes the maximum sum from the left subtree, the maximum sum from the right subtree, and the current sum (node value + left sum + right sum). It updates the max_sum
variable with the maximum of the current sum and the existing max_sum
.
The time complexity of the solution is O(n), where n is the number of nodes in the binary tree, as we visit each node once. The space complexity is O(h), where h is the height of the binary tree, as the recursive calls consume stack space. In the worst case, when the tree is skewed, the height is O(n), resulting in O(n) space complexity.