Insertion in Binary Search Tree (BST)
Last Updated : 08 Dec, 2025
Given the root of a Binary Search Tree, we need to insert a new node with given value in the BST. All the nodes have distinct values in the BST and we may assume that the the new value to be inserted is not present in BST.
Example:
A new key is inserted at the position that maintains the BST property. We start from the root and move downward: if the key is smaller, go left; if larger, go right. We continue until we find an unoccupied spot where the node can be placed without violating the BST property, and insert it there as a new leaf.
Insertion in Binary Search Tree using Recursion:
C++ //Driver Code Starts #include <iostream> #include <queue> #include <vector> #include <algorithm> using namespace std; // Node structure class Node { public: int data; Node* left; Node* right; Node(int val) { data = val; left = right = nullptr; } }; int getHeight(Node* root, int h) { if (root == nullptr) return h - 1; return max(getHeight(root->left, h + 1), getHeight(root->right, h + 1)); } void levelOrder(Node* root) { queue<pair<Node*, int>> q; q.push({root, 0}); int lastLevel = 0; int height = getHeight(root, 0); while (!q.empty()) { auto top = q.front(); q.pop(); Node* node = top.first; int lvl = top.second; if (lvl > lastLevel) { cout << " "; lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node cout << (node->data == -1 ? "N" : to_string(node->data)) << " "; // null node has no children if (node->data == -1) continue; if (node->left == nullptr) q.push({new Node(-1), lvl + 1}); else q.push({node->left, lvl + 1}); if (node->right == nullptr) q.push({new Node(-1), lvl + 1}); else q.push({node->right, lvl + 1}); } } //Driver Code Ends Node* insert(Node* root, int key) { // If the tree is empty, return a new node if (root == nullptr) return new Node(key); // Otherwise, recur down the tree if (key < root->data) root->left = insert(root->left, key); else root->right = insert(root->right, key); // Return the (unchanged) node pointer return root; } //Driver Code Starts int main() { Node* root = nullptr; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } //Driver Code Ends C //Driver Code Starts #include <stdio.h> #include <stdlib.h> // Node structure struct Node { int data; struct Node* left; struct Node* right; }; // Function prototypes struct Node* newNode(int val); struct Node* insert(struct Node* root, int key); void levelOrder(struct Node* root); int getHeight(struct Node* root, int h); // Queue node for level order traversal struct QueueNode { struct Node* node; int level; struct QueueNode* next; }; // Queue structure struct Queue { struct QueueNode* front; struct QueueNode* rear; }; // Create a new queue struct Queue* createQueue() { struct Queue* q = (struct Queue*)malloc(sizeof(struct Queue)); q->front = q->rear = NULL; return q; } // Enqueue node with level void enqueue(struct Queue* q, struct Node* node, int level) { struct QueueNode* temp = (struct QueueNode*)malloc(sizeof(struct QueueNode)); temp->node = node; temp->level = level; temp->next = NULL; if (q->rear == NULL) { q->front = q->rear = temp; return; } q->rear->next = temp; q->rear = temp; } // Dequeue node struct QueueNode* dequeue(struct Queue* q) { if (q->front == NULL) return NULL; struct QueueNode* temp = q->front; q->front = q->front->next; if (q->front == NULL) q->rear = NULL; return temp; } // Check if queue is empty int isEmpty(struct Queue* q) { return q->front == NULL; } // Function to get height of tree int getHeight(struct Node* root, int h) { if (root == NULL) return h - 1; int leftH = getHeight(root->left, h + 1); int rightH = getHeight(root->right, h + 1); return (leftH > rightH ? leftH : rightH); } // Level order traversal (prints N for null) void levelOrder(struct Node* root) { if (root == NULL) return; struct Queue* queue = createQueue(); enqueue(queue, root, 0); int lastLevel = 0; int height = getHeight(root, 0); while (!isEmpty(queue)) { struct QueueNode* top = dequeue(queue); struct Node* node = top->node; int lvl = top->level; free(top); if (lvl > lastLevel) { printf(" "); lastLevel = lvl; } if (lvl > height) break; if (node == NULL) { printf("N "); continue; } printf("%d ", node->data); enqueue(queue, node->left, lvl + 1); enqueue(queue, node->right, lvl + 1); } } //Driver Code Ends // Create a new node struct Node* newNode(int val) { struct Node* node = (struct Node*)malloc(sizeof(struct Node)); node->data = val; node->left = node->right = NULL; return node; } // Insert a node in BST struct Node* insert(struct Node* root, int key) { if (root == NULL) return newNode(key); if (key < root->data) root->left = insert(root->left, key); else if (key > root->data) root->right = insert(root->right, key); return root; } //Driver Code Starts int main() { struct Node* root = NULL; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / // 15 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 15); // Print the level order traversal levelOrder(root); return 0; } //Driver Code Ends Java //Driver Code Starts import java.util.LinkedList; import java.util.Queue; import java.util.List; import java.util.ArrayList; // Node structure class Node { int data; Node left, right; public Node(int val) { data = val; left = right = null; } } class GFG { static int getHeight( Node root, int h ) { if( root == null ) return h-1; return Math.max(getHeight(root.left, h+1), getHeight(root.right, h+1)); } static void levelOrder(Node root) { Queue<List<Object>> queue = new LinkedList<>(); queue.offer(List.of(root, 0)); int lastLevel = 0; // function to get the height of tree int height = getHeight(root, 0); // printing the level order of tree while( !queue.isEmpty()) { List<Object> top = queue.poll(); Node node = (Node) top.get(0); int lvl = (int) top.get(1); if( lvl > lastLevel ) { System.out.println(); lastLevel = lvl; } // all levels are printed if( lvl > height ) break; // printing null node System.out.print((node.data == -1 ? "N" : node.data) + " "); // null node has no children if( node.data == -1 ) continue; if( node.left == null ) queue.offer(List.of(new Node(-1), lvl+1)); else queue.offer(List.of(node.left, lvl+1)); if( node.right == null ) queue.offer(List.of(new Node(-1), lvl+1)); else queue.offer(List.of(node.right, lvl+1)); } } //Driver Code Ends static Node insert(Node root, int key) { // If the tree is empty, return a new node if (root == null) return new Node(key); // Otherwise, recur down the tree if (key < root.data) root.left = insert(root.left, key); else root.right = insert(root.right, key); // Return the (unchanged) node pointer return root; } //Driver Code Starts public static void main(String[] args) { Node root = null; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } } //Driver Code Ends Python #Driver Code Starts from collections import deque # Node structure class Node: def __init__(self, val): self.data = val self.left = None self.right = None def getHeight(root, h): if root is None: return h - 1 return max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)) def levelOrder(root): queue = deque() queue.append((root, 0)) lastLevel = 0 height = getHeight(root, 0) while queue: node, lvl = queue.popleft() if lvl > lastLevel: print() lastLevel = lvl # all levels are printed if lvl > height: break # printing null node print("N" if node.data == -1 else node.data, end=" ") # null node has no children if node.data == -1: continue if node.left is None: queue.append((Node(-1), lvl + 1)) else: queue.append((node.left, lvl + 1)) if node.right is None: queue.append((Node(-1), lvl + 1)) else: queue.append((node.right, lvl + 1)) #Driver Code Ends def insert(root, key): # If the tree is empty, return a new node if root is None: return Node(key) # Otherwise, recur down the tree if key < root.data: root.left = insert(root.left, key) else: root.right = insert(root.right, key) # Return the (unchanged) node pointer return root #Driver Code Starts # Create BST # 22 # / \ # 12 30 # / \ # 8 20 # / \ # 15 30 root = None root = insert(root, 22) root = insert(root, 12) root = insert(root, 30) root = insert(root, 8) root = insert(root, 20) root = insert(root, 30) root = insert(root, 15) # print the level order # traversal of the BST levelOrder(root) #Driver Code Ends C# //Driver Code Starts using System; using System.Collections.Generic; // Node structure class Node { public int data; public Node left, right; public Node(int val) { data = val; left = right = null; } } class GFG { static int getHeight(Node root, int h) { if (root == null) return h - 1; return Math.Max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)); } static void levelOrder(Node root) { Queue<(Node, int)> queue = new Queue<(Node, int)>(); queue.Enqueue((root, 0)); int lastLevel = 0; int height = getHeight(root, 0); while (queue.Count > 0) { var (node, lvl) = queue.Dequeue(); if (lvl > lastLevel) { Console.WriteLine(); lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node Console.Write((node.data == -1 ? "N" : node.data.ToString()) + " "); // null node has no children if (node.data == -1) continue; if (node.left == null) queue.Enqueue((new Node(-1), lvl + 1)); else queue.Enqueue((node.left, lvl + 1)); if (node.right == null) queue.Enqueue((new Node(-1), lvl + 1)); else queue.Enqueue((node.right, lvl + 1)); } } //Driver Code Ends static Node insert(Node root, int key) { // If the tree is empty, return a new node if (root == null) return new Node(key); // Otherwise, recur down the tree if (key < root.data) root.left = insert(root.left, key); else root.right = insert(root.right, key); // Return the (unchanged) node pointer return root; } //Driver Code Starts public static void Main(string[] args) { Node root = null; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } } //Driver Code Ends Javascript //Driver Code Starts const Denque = require("denque"); // Node structure class Node { constructor(val) { this.data = val; this.left = null; this.right = null; } } function getHeight(root, h) { if (root === null) return h - 1; return Math.max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)); } function levelOrder(root) { const queue = new Denque(); queue.push([root, 0]); let lastLevel = 0; const height = getHeight(root, 0); while (!queue.isEmpty()) { const [node, lvl] = queue.shift(); if (lvl > lastLevel) { console.log(); lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node process.stdout.write((node.data === -1 ? "N" : node.data) + " "); // null node has no children if (node.data === -1) continue; if (node.left === null) queue.push([new Node(-1), lvl + 1]); else queue.push([node.left, lvl + 1]); if (node.right === null) queue.push([new Node(-1), lvl + 1]); else queue.push([node.right, lvl + 1]); } } //Driver Code Ends function insert(root, key) { // If the tree is empty, return a new node if (root === null) return new Node(key); // Otherwise, recur down the tree if (key < root.data) root.left = insert(root.left, key); else root.right = insert(root.right, key); // Return the (unchanged) node pointer return root; } //Driver Code Starts // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 let root = null; root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); //Driver Code Ends Output22 12 30 8 20 N 30 N N 15 N N N
Time Complexity: O(h)
- The worst-case time complexity of insert operations is O(h) where h is the height of the Binary Search Tree.
- In the worst case, we may have to travel from the root to the deepest leaf node. The height of a skewed tree may become n and the time complexity of insertion operation may become O(n).
Auxiliary Space: O(h), due to recursive stack.
Insertion in Binary Search Tree using Iterative approach:
Instead of using recursion, we can also implement the insertion operation iteratively using a while loop. Below is the implementation using a while loop, using the same idea as above.
C++ //Driver Code Starts #include <iostream> #include <queue> #include <vector> #include <algorithm> using namespace std; // Node structure class Node { public: int data; Node* left; Node* right; Node(int item) { data = item; left = right = nullptr; } }; int getHeight(Node* root, int h) { if (root == nullptr) return h - 1; return max(getHeight(root->left, h + 1), getHeight(root->right, h + 1)); } void levelOrder(Node* root) { queue<pair<Node*, int>> queue; queue.push({root, 0}); int lastLevel = 0; int height = getHeight(root, 0); while (!queue.empty()) { auto top = queue.front(); queue.pop(); Node* node = top.first; int lvl = top.second; if (lvl > lastLevel) { cout << " "; lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node cout << (node->data == -1 ? "N" : to_string(node->data)) << " "; // null node has no children if (node->data == -1) continue; if (node->left == nullptr) queue.push({new Node(-1), lvl + 1}); else queue.push({node->left, lvl + 1}); if (node->right == nullptr) queue.push({new Node(-1), lvl + 1}); else queue.push({node->right, lvl + 1}); } } //Driver Code Ends Node* insert(Node* root, int key) { Node* temp = new Node(key); // If tree is empty if (root == nullptr) { return temp; } // Find the node who is going to // have the new node as its child Node* curr = root; while (curr != nullptr) { if (curr->data > key && curr->left != nullptr) { curr = curr->left; } else if (curr->data < key && curr->right != nullptr) { curr = curr->right; } else break; } // If key is smaller, make it left // child, else right child if (curr->data > key) { curr->left = temp; } else { curr->right = temp; } return root; } //Driver Code Starts int main() { Node* root = nullptr; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order traversal of the BST levelOrder(root); } //Driver Code Ends C //Driver Code Starts #include <stdio.h> #include <stdlib.h> // Node structure struct Node { int data; struct Node* left; struct Node* right; }; // Queue node for level order traversal struct QueueNode { struct Node* node; int level; struct QueueNode* next; }; // Queue structure struct Queue { struct QueueNode* front; struct QueueNode* rear; }; // Create a new queue struct Queue* createQueue() { struct Queue* q = (struct Queue*)malloc(sizeof(struct Queue)); q->front = q->rear = NULL; return q; } // Enqueue void enqueue(struct Queue* q, struct Node* node, int level) { struct QueueNode* temp = (struct QueueNode*)malloc(sizeof(struct QueueNode)); temp->node = node; temp->level = level; temp->next = NULL; if (q->rear == NULL) { q->front = q->rear = temp; return; } q->rear->next = temp; q->rear = temp; } // Dequeue struct QueueNode* dequeue(struct Queue* q) { if (q->front == NULL) return NULL; struct QueueNode* temp = q->front; q->front = q->front->next; if (q->front == NULL) q->rear = NULL; return temp; } // Check if queue is empty int isEmpty(struct Queue* q) { return q->front == NULL; } int getHeight(struct Node* root, int h) { if (root == NULL) return h - 1; int leftH = getHeight(root->left, h + 1); int rightH = getHeight(root->right, h + 1); return (leftH > rightH ? leftH : rightH); } void levelOrder(struct Node* root) { struct Queue* queue = createQueue(); enqueue(queue, root, 0); int lastLevel = 0; int height = getHeight(root, 0); while (!isEmpty(queue)) { struct QueueNode* top = dequeue(queue); struct Node* node = top->node; int lvl = top->level; free(top); if (lvl > lastLevel) { printf(" "); lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node if (node->data == -1) printf("N "); else printf("%d ", node->data); // null node has no children if (node->data == -1) continue; if (node->left == NULL) enqueue(queue, newNode(-1), lvl + 1); else enqueue(queue, node->left, lvl + 1); if (node->right == NULL) enqueue(queue, newNode(-1), lvl + 1); else enqueue(queue, node->right, lvl + 1); } } //Driver Code Ends // Create a new node struct Node* newNode(int item) { struct Node* node = (struct Node*)malloc(sizeof(struct Node)); node->data = item; node->left = node->right = NULL; return node; } struct Node* insert(struct Node* root, int key) { struct Node* temp = newNode(key); // If tree is empty if (root == NULL) return temp; // Find the node who is going to // have the new node as its child struct Node* curr = root; while (curr != NULL) { if (key < curr->data && curr->left != NULL) curr = curr->left; else if (key > curr->data && curr->right != NULL) curr = curr->right; else break; } // If key is smaller, make it left // child, else right child if (key < curr->data) curr->left = temp; else curr->right = temp; return root; } //Driver Code Starts int main() { struct Node* root = NULL; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } //Driver Code Ends Java //Driver Code Starts import java.util.LinkedList; import java.util.Queue; import java.util.List; import java.util.ArrayList; // Node structure class Node { int data; Node left, right; public Node(int item) { data = item; left = right = null; } } class GFG { static int getHeight( Node root, int h ) { if( root == null ) return h-1; return Math.max(getHeight(root.left, h+1), getHeight(root.right, h+1)); } static void levelOrder(Node root) { Queue<List<Object>> queue = new LinkedList<>(); queue.offer(List.of(root, 0)); int lastLevel = 0; // function to get the height of tree int height = getHeight(root, 0); // printing the level order of tree while( !queue.isEmpty()) { List<Object> top = queue.poll(); Node node = (Node) top.get(0); int lvl = (int) top.get(1); if( lvl > lastLevel ) { System.out.println(); lastLevel = lvl; } // all levels are printed if( lvl > height ) break; // printing null node System.out.print((node.data == -1 ? "N" : node.data) + " "); // null node has no children if( node.data == -1 ) continue; if( node.left == null ) queue.offer(List.of(new Node(-1), lvl+1)); else queue.offer(List.of(node.left, lvl+1)); if( node.right == null ) queue.offer(List.of(new Node(-1), lvl+1)); else queue.offer(List.of(node.right, lvl+1)); } } //Driver Code Ends static Node insert(Node root, int key) { Node temp = new Node(key); // If tree is empty if (root == null) { return temp; } // Find the node who is going to have // the new node temp as its child Node curr = root; while (curr != null) { if (curr.data > key && curr.left != null ) { curr = curr.left; } else if( curr.data < key && curr.right != null ) { curr = curr.right; } else break; } // If key is smaller, make it left // child, else right child if (curr.data > key) { curr.left = temp; } else { curr.right = temp; } return root; } //Driver Code Starts public static void main(String[] args) { Node root = null; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } } //Driver Code Ends Python #Driver Code Starts from collections import deque # Node structure class Node: def __init__(self, item): self.data = item self.left = None self.right = None def getHeight(root, h): if root is None: return h - 1 return max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)) def levelOrder(root): queue = deque() queue.append((root, 0)) lastLevel = 0 height = getHeight(root, 0) while queue: node, lvl = queue.popleft() if lvl > lastLevel: print() lastLevel = lvl # all levels are printed if lvl > height: break # printing null node print("N" if node.data == -1 else node.data, end=" ") # null node has no children if node.data == -1: continue if node.left is None: queue.append((Node(-1), lvl + 1)) else: queue.append((node.left, lvl + 1)) if node.right is None: queue.append((Node(-1), lvl + 1)) else: queue.append((node.right, lvl + 1)) #Driver Code Ends def insert(root, key): temp = Node(key) # If tree is empty if root is None: return temp # Find the node who is going to have # the new node as its child curr = root while curr is not None: if curr.data > key and curr.left is not None: curr = curr.left elif curr.data < key and curr.right is not None: curr = curr.right else: break # If key is smaller, make it left # child, else right child if curr.data > key: curr.left = temp else: curr.right = temp return root #Driver Code Starts if __name__ == "__main__": # Create BST # 22 # / \ # 12 30 # / \ # 8 20 # / \ # 15 30 root = None root = insert(root, 22) root = insert(root, 12) root = insert(root, 30) root = insert(root, 8) root = insert(root, 20) root = insert(root, 30) root = insert(root, 15) # print the level order # traversal of the BST levelOrder(root) #Driver Code Ends C# //Driver Code Starts using System; using System.Collections.Generic; // Node structure class Node { public int data; public Node left, right; public Node(int item) { data = item; left = right = null; } } class GFG { static int getHeight(Node root, int h) { if (root == null) return h - 1; return Math.Max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)); } static void levelOrder(Node root) { Queue<(Node, int)> queue = new Queue<(Node, int)>(); queue.Enqueue((root, 0)); int lastLevel = 0; int height = getHeight(root, 0); while (queue.Count > 0) { var (node, lvl) = queue.Dequeue(); if (lvl > lastLevel) { Console.WriteLine(); lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node Console.Write((node.data == -1 ? "N" : node.data.ToString()) + " "); // null node has no children if (node.data == -1) continue; if (node.left == null) queue.Enqueue((new Node(-1), lvl + 1)); else queue.Enqueue((node.left, lvl + 1)); if (node.right == null) queue.Enqueue((new Node(-1), lvl + 1)); else queue.Enqueue((node.right, lvl + 1)); } } //Driver Code Ends static Node insert(Node root, int key) { Node temp = new Node(key); // If tree is empty if (root == null) { return temp; } // Find the node who is going to // have the new node as its child Node curr = root; while (curr != null) { if (curr.data > key && curr.left != null) { curr = curr.left; } else if (curr.data < key && curr.right != null) { curr = curr.right; } else break; } // If key is smaller, make it left // child, else right child if (curr.data > key) { curr.left = temp; } else { curr.right = temp; } return root; } //Driver Code Starts public static void Main(string[] args) { Node root = null; // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); } } //Driver Code Ends Javascript //Driver Code Starts const Denque = require("denque"); // Node structure class Node { constructor(item) { this.data = item; this.left = null; this.right = null; } } function getHeight(root, h) { if (root === null) return h - 1; return Math.max(getHeight(root.left, h + 1), getHeight(root.right, h + 1)); } function levelOrder(root) { const queue = new Denque(); queue.push([root, 0]); let lastLevel = 0; // function to get the height of tree const height = getHeight(root, 0); // printing the level order of tree while (!queue.isEmpty()) { const [node, lvl] = queue.shift(); if (lvl > lastLevel) { console.log(); lastLevel = lvl; } // all levels are printed if (lvl > height) break; // printing null node process.stdout.write((node.data === -1 ? "N" : node.data) + " "); // null node has no children if (node.data === -1) continue; if (node.left === null) queue.push([new Node(-1), lvl + 1]); else queue.push([node.left, lvl + 1]); if (node.right === null) queue.push([new Node(-1), lvl + 1]); else queue.push([node.right, lvl + 1]); } } //Driver Code Ends function insert(root, key) { const temp = new Node(key); // If tree is empty if (root === null) return temp; // Find the node who is going to have // the new node as its child let curr = root; while (curr !== null) { if (curr.data > key && curr.left !== null) { curr = curr.left; } else if (curr.data < key && curr.right !== null) { curr = curr.right; } else break; } // If key is smaller, make it left // child, else right child if (curr.data > key) curr.left = temp; else curr.right = temp; return root; } //Driver Code Starts // Driver code // Create BST // 22 // / \ // 12 30 // / \ // 8 20 // / \ // 15 30 let root = null; root = insert(root, 22); root = insert(root, 12); root = insert(root, 30); root = insert(root, 8); root = insert(root, 20); root = insert(root, 30); root = insert(root, 15); // print the level order // traversal of the BST levelOrder(root); //Driver Code Ends Output22 12 30 8 20 N 30 N N 15 N N N
Time complexity: O(h), where h is the height of the tree.
Auxiliary space: O(1)
Related Links:
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem
My Profile