57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Breadth-First Search | ||
|  | --- | ||
|  | ## Breadth-First Search
 | ||
|  | 
 | ||
|  | Let's first define the `Tree` class to be used for the implementation of the Breadth First Search algorithm.  | ||
|  | 
 | ||
|  | ```python | ||
|  | class Tree: | ||
|  |   def __init__(self, x): | ||
|  |     self.val = x | ||
|  |     self.left = None | ||
|  |     self.right = None | ||
|  | ``` | ||
|  | 
 | ||
|  | The breadth first search algorithm moves from one level to another starting from the root of the tree. We will make use of a `queue` for this.  | ||
|  | 
 | ||
|  | ```python | ||
|  | 
 | ||
|  | def bfs(root_node): | ||
|  |   queue = [root_node] | ||
|  |    | ||
|  |   while queue: | ||
|  |     top_element = queue.pop() | ||
|  |     print("Node processed: ",top_element) | ||
|  |      | ||
|  |     if top_element.left: | ||
|  |       queue.append(top_element.left) | ||
|  | 
 | ||
|  |     if top_element.right: | ||
|  |       queue.append(top_element.right) | ||
|  | ```  | ||
|  | 
 | ||
|  | We can easily modify the above code to print the level of each node as well. | ||
|  | 
 | ||
|  | ```python | ||
|  | 
 | ||
|  | def bfs(root_node): | ||
|  |   queue = [(root_node, 0)] | ||
|  |    | ||
|  |   while queue: | ||
|  |     top_element, level = queue.pop() | ||
|  |     print("Node processed: {} at level {}".format(top_element, level)) | ||
|  |      | ||
|  |     if top_element.left: | ||
|  |       queue.append((top_element.left, level + 1)) | ||
|  | 
 | ||
|  |     if top_element.right: | ||
|  |       queue.append((top_element.right, level + 1)) | ||
|  | ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | | Complexity   | Time | Space | | ||
|  | | ----- | ------ | ------ |  | ||
|  | | BFS |   n    |    n   |   | ||
|  | 
 |