Data Structures and Algorithms: Sum of Distances in Tree šŸŽÆ

beginner
24 min

Data Structures and Algorithms: Sum of Distances in Tree šŸŽÆ

Welcome to our in-depth guide on the Sum of Distances in a Tree! This lesson is designed to help you understand this crucial concept, perfect for both beginners and intermediates. Let's dive right in!

What is a Tree? šŸ“

A Tree is a special type of graph where every node (except for the root node) has exactly one parent node. It's a fundamental data structure used in computer science.

The Problem: Sum of Distances in a Tree šŸ’”

Given a tree, the task is to find the sum of all pairwise distances between any two nodes. This problem is a great way to understand and apply various data structure and algorithm concepts.

Algorithm Approach šŸ’”

  1. Traverse the tree: We'll use Depth-First Search (DFS) to traverse the tree. DFS is a popular algorithm used for exploring graph and tree structures.

  2. Compute the distances: As we traverse the tree, we'll calculate the distance between the current node and all its ancestors. The total distance between two nodes in a tree is the sum of their paths' lengths.

  3. Calculate the sum: Finally, we'll sum up all pairwise distances between nodes.

Code Example šŸ“

Here's a Python implementation of the Sum of Distances in a Tree algorithm:

python
class Node: def __init__(self, key): self.key = key self.left = None self.right = None self.parent = None self.distance_from_root = 0 def find_distance(node1, node2): height_diff = node1.distance_from_root - node2.distance_from_root return height_diff * (height_diff + 1) // 2 def sum_of_distances(root): total = 0 visited = set() q = [(root, 0)] while q: node, parent_distance = q.pop(0) if node not in visited: visited.add(node) node.parent = parent_distance if node.left: q.append((node.left, node.key)) if node.right: q.append((node.right, node.key)) for child in [node.left, node.right]: if child: total += find_distance(node, child) return total # Example Tree root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) root.right.left = Node(6) root.right.right = Node(7) print(sum_of_distances(root))

In this example, we've created a simple binary tree, then calculated the sum of all pairwise distances using the Sum of Distances in a Tree algorithm.

Quiz Time šŸ’”