Breadth-First Search
This is an algorithm for traversing a tree where the traversing starts from a selected node normally the root and the traversing happens layerwise from left to right.
In the diagram above if we traversed the tree and stored the results in an array the result array would be [0,1,2,3,4,5,7]
Steps to implement
- Create a node variable set it to the root property
- Create data and queue variables set them to an empty array or List.
- Add the node variable at the end of the queue.
- Iterate while the queue is no empty, on each Iteration set the node the first node remove from the queue array. Add the node value property to the data array then check if a left property exists on the node if it does add it to the queue check if the right property exists and add it to the node.
The JavaScript code implementation is as below BFS
:
class Node{ constructor(val){ this.val = val; this.left = null; this.right = null; } } class BST{ constructor(){ this.root = null; } insert(val){ let newNode = new Node(val); if(!this.root){ this.root = newNode; }else{ let current = this.root; while(true){ if(val < current.val){ if(current.left === null){ current.left = newNode; return this }else{ current = current.left; } }else{ if(current.right === null){ current.right = newNode; return this }else{ current = current.right } } } } } find(val){ let current = this.root; let found = false; while(current && !found){ if(val < current.val){ if(current.val === val){ found = true; return current; }else{ current = current.left; } }else{ if(current.val === val){ found = true; return current; }else{ current = current.right; } } } return 'not found' } BFS(){ let data=[]; let queue=[]; let node= this.root; queue.push(node); while(queue.length){ node = queue.shift(); data.push(node.val); if(node.left)queue.push(node.left); if(node.right)queue.push(node.right); } return data } } let tree = new BST(); tree.insert(100); tree.insert(200); tree.insert(150); tree.insert(80); tree.insert(90); tree.insert(50); tree.insert(30); tree.insert(20); tree.insert(180); tree.insert(190); console.log(tree,BFS())
In python :-
class Node: def __init__(self,val): self.val = val self.left = None self.right = None class BST: def __init__(self): self.root= None def insert(self, val): newNode = Node(val) if self.root == None: self.root= newNode else: current = self.root while True: if val< current.val: if current.left == None: current.left = newNode return self else: current= current.left else: if(current.right == None): current.right = newNode return self else: current = current.right def find(self, val): current= self.root found = False while current and not found: if val < current.val: current = current.left elif val > current.val: current= current.right else: found = True if(not found): return "not found" return current def bfs(self): node = self.root data = [] queue = [] queue.append(node) while len(queue)!= 0: node = queue.pop(0) data.append(node.val) if(node.left): queue.append(node.left) if(node.right): queue.append(node.right) return data bst = BST() bst.insert(100) bst.insert(200) bst.insert(150) bst.insert(175) bst.insert(160) bst.insert(180) bst.insert(75) bst.insert(50) bst.insert(65) bst.insert(40) bst.insert(55) bst.insert(20) print(bst.bfs())
Next we will take a look at depth first search preorder
.
Top comments (0)