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   |  
							 | 
						||
| 
								 | 
							
								
							 |