DSA ORAL Question Bank
DSA ORAL Question Bank
Can you explain the difference between file structure and storage
structure?
File Structure: Representation of data into secondary or auxiliary memory say
any device such as hard disk or pen drives that stores data which remains intact until
manually deleted is known as a file structure representation.
Storage Structure: In this type, data is stored in the main memory i.e RAM, and is
deleted once the function that uses this data gets completely executed.
The difference is that storage structure has data stored in the memory of the
computer system, whereas file structure has the data stored in the auxiliary memory.
2. Can you tell how linear data structures differ from non-linear data
structures?
If the elements of a data structure result in a sequence or a linear list then it is
called a linear data structure. Whereas, traversal of nodes happens in a non-linear
fashion in non-linear data structures.
Lists, stacks, and queues are examples of linear data structures whereas graphs
and trees are the examples of non-linear data structures.
Types
There are two types of data structures:
Linear data structure: If the elements of a data structure result in a
sequence or a linear list then it is called a linear data structure. Example: Arrays, Linked
List, Stacks, Queues etc.
Non-linear data structure: If the elements of data structure results in a way
that traversal of nodes is not done in a sequential manner, then it is a non linear data
structure. Example: Trees, Graphs etc.
Applications
Data structures form the core foundation of software programming as any efficient
algorithm to a given problem is dependent on how effectively a data is structured.
Identifiers look ups in compiler implementations are built using hash tables.
The B-trees data structures are suitable for the databases implementation.
Some of the most important areas where data structures are used are as follows:
1. Artificial intelligence
2. Compiler design
3. Machine learning
4. Database design and management
5. Blockchain
6. Numerical and Statistical analysis
7. Operating system development
8. Image & Speech Processing
9. Cryptography
1. Can we store a duplicate key in HashMap?
No, duplicate keys cannot be inserted in HashMap. If you try to insert any
entry with an existing key, then the old value would be overridden with the new value.
Doing this will not change the size of HashMap.
This is why the keySet() method returns all keys as a SET in Java
since it doesn't allow duplicates.
2. What is a tree data structure?
A binary Tree is a special type of tree where each node can have at most
two children. Binary tree is generally partitioned into three disjoint subsets, i.e. the root of
the tree, left sub-tree and right sub-tree.
Tree traversal is a process of visiting all the nodes of a tree. Since root
(head) is the first node and all nodes are connected via edges (or links) we always start
with that node. There are three ways which we use to traverse a tree −
Inorder Traversal:
Algorithm:
Step 1. Traverse the left subtree, i.e., call
Inorder(root.left)
Step 2. Visit the root.
Step 3. Traverse the right subtree, i.e., call
Inorder(root.right)
Inorder traversal in Java:
// Print inorder traversal of given tree.
void printInorderTraversal(Node root)
{
if (root == null)
return;
//first traverse to the left subtree
printInorderTraversal(root.left);
//then print the data of node
System.out.print(root.data + " ");
//then traverse to the right subtree
printInorderTraversal(root.right);
}
Uses: In binary search trees (BST), inorder traversal gives
nodes in ascending order.
Preorder Traversal:
Algorithm:
Step 1. Visit the root.
Step 2. Traverse the left subtree, i.e., call
Preorder(root.left)
Step 3. Traverse the right subtree, i.e., call
Preorder(root.right)
Preorder traversal in Java:
// Print preorder traversal of given tree.
void printPreorderTraversal(Node root)
{
if (root == null)
return;
//first print the data of node
System.out.print(root.data + " ");
//then traverse to the left subtree
printPreorderTraversal(root.left);
//then traverse to the right subtree
printPreorderTraversal(root.right);
}
Uses:
Preorder traversal is commonly used to create a
copy of the tree.
It is also used to get prefix expression of an
expression tree.
Postorder Traversal:
Algorithm:
Step 1. Traverse the left subtree, i.e., call
Postorder(root.left)
Step 2. Traverse the right subtree, i.e., call
Postorder(root.right)
Step 3. Visit the root.
Postorder traversal in Java:
// Print postorder traversal of given tree.
void printPostorderTraversal(Node root)
{
if (root == null)
return;
//first traverse to the left subtree
printPostorderTraversal(root.left);
//then traverse to the right subtree
printPostorderTraversal(root.right);
//then print the data of node
System.out.print(root.data + " ");
}
Uses:
Postorder traversal is commonly used to delete the
tree.
It is also useful to get the postfix expression of an
expression tree.
Consider the following tree as an example, then:
Inorder Traversal => Left, Root, Right : [4, 2, 5, 1, 3]
Preorder Traversal => Root, Left, Right : [1, 2, 4, 5, 3]
Postorder Traversal => Left, Right, Root : [4, 5, 2, 3, 1]
12. What is a Binary Search Tree?
Graphs are used in wide varieties of applications. Some of them are as follows:
Tree and graph are differentiated by the fact that a tree structure
must be connected and can never have loops whereas in the graph there are no
restrictions.
Tree provides insights on relationship between nodes in a
hierarchical manner and graph follows a network model.
36. What is the difference between the Breadth First Search (BFS) and
Depth First Search (DFS)?
BFS and DFS both are the traversing methods for a graph. Graph
traversal is nothing but the process of visiting all the nodes of the graph.
The main difference between BFS and DFS is that BFS traverses
level by level whereas DFS follows first a path from the starting to the end node, then
another path from the start to end, and so on until all nodes are visited.
Furthermore, BFS uses queue data structure for storing the nodes
whereas DFS uses the stack for traversal of the nodes for implementation.
DFS yields deeper solutions that are not optimal, but it works well
when the solution is dense whereas the solutions of BFS are optimal.
You can learn more about BFS here: Breadth First Search and
DFS here: Depth First Search.
37. How do you know when to use DFS over BFS?
39. Given an m x n 2D grid map of '1’s which represents land and '0’s that
represents water, return the number of islands (surrounded by water and formed
by connecting adjacent lands in 2 directions - vertically or horizontally). Assume
that the boundary cases - which is all four edges of the grid are surrounded by
water.
Constraints are:
3. m == grid.length
4. n == grid[i].length
5. 1 <= m, n <= 300
6. grid[i][j] can only be ‘0’ or ‘1’.
Example:
Input: grid = [
[“1” , “1” , “1” , “0” , “0”],
[“1” , “1” , “0” , “0” , “0”],
[“0” , “0” , “1” , “0” , “1”],
[“0” , “0” , “0” , “1” , “1”]
]
Output: 3
7. Solution:
8. class InterviewBit {
9. public int numberOfIslands(char[][] grid) {
10. if(grid==null || grid.length==0||grid[0].length==0)
11. return 0;
12.
13. int m = grid.length;
14. int n = grid[0].length;
15.
16. int count=0;
17. for(int i=0; i<m; i++){
18. for(int j=0; j<n; j++){
19. if(grid[i][j]=='1'){
20. count++;
21. mergeIslands(grid, i, j);
22. }
23. }
24. }
25.
26. return count;
27. }
28.
29. public void mergeIslands(char[][] grid, int i, int j){
30. int m=grid.length;
31. int n=grid[0].length;
32.
33. if(i<0||i>=m||j<0||j>=n||grid[i][j]!='1')
34. return;
35.
36. grid[i][j]='X';
37.
38. mergeIslands(grid, i-1, j);
39. mergeIslands(grid, i+1, j);
40. mergeIslands(grid, i, j-1);
41. mergeIslands(grid, i, j+1);
42. }
43. }
40. What is a heap data structure?
Heap is a special tree-based non-linear data structure in which the tree is a complete
binary tree. A binary tree is said to be complete if all levels are completely filled except
possibly the last level and the last level has all elements towards as left as possible.
Heaps are of two types:
1. Max-Heap:
In a Max-Heap the data element present at the root
node must be greatest among all the data elements present in the tree.
This property should be recursively true for all sub-
trees of that binary tree.
Min-Heap:
In a Min-Heap the data element present at the root
node must be the smallest (or minimum) among all the data elements present in the tree.
This property should be recursively true for all sub-
trees of that binary tree.