(Download file to view animation) Dr. S. Lovelyn Rose PSG College of Technology Coimbatore, India
Algorithm Insert_LinkedList_BST(root, element) * root points to the root element of the linked list * ‘element’ is the element to the inserted * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * GetNode() is a function that creates a node with a data part and 2 address parts and assigns null in the address parts
1.temp=root; 2 if(root == null) 3. rootdata = element; Insert as first node 4. Return; 5. end if 6. while(1) Element to be inserted is 4 7. if(tempdata > element) 8. if(templchild == null) 2 temp 9.templchild = GetNode() 10.templchild  data = 1 5 element 10.break; 0 3 8 11.end if
12.else 13.temp = templchild 14.end else 15.end if 16.else 17.if(temprchild == null) Element to be inserted is 4 18.temprchild = GetNode() 2 temp 19.temprchild  data = element 1 5 20.break; 21.end if 0 3 8
12.else 13.temp = temprchild //Move to the right child 23.end else 24.end if 25.end while 26. end Insert_LinkedList_BST Element to be inserted is 4 2 temp 1 5 0 3 8
Algorithm Delete_LinkedList_BST(root) * root is a pointer to the root node * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * temp is used to find the address of the element to be deleted * parent stores the address of the parent of the element to be deleted * inorder_N is the inorder successor * parent_inorder_N is the parent of the inorder successor
//Search for the element 1. temp = root Element to be 2. parent = root searched is 4 3. while((element != tempdata) && (temp != null)) // Loop until the element is found 4.parent = temp 5 5.if(element < tempdata) 6.temp = temp left // Move left 3 7 7.end if 8.else 9.temp = tempright //Move right 2 4 9 10.end else 11.end while
12. If(temp != null) temp is a leaf node Element found 13.if((templchild == null) and (temprchild == null)) 14.if(parent == temp) Only one node 15.root = null 16.end if 17. else if(temp == parentlchild) 18. parentlchild = null 5 19. end else if else 21.parentrchild = null 4 7 22.end else 3 23.FreeNode(temp) 24.end if 2 4
// Case 2 - Delete node with one child else if((templchild == null)or(temprchild == null)) 26.if(parent == temp) 27.if(templchild != null) 28.root = templchild 29.end if root 30.else 4 31.root = temprchild 32.end else 33.end if 2
else if(temp == parentlchild) 35.if(templchild != null) 36.parentlchild = templchild 37.end if temp is a left child 38.else 39.parentlchild = temprchild 40.end else 5 41.end else if else 43.if(templchild != null) 4 7 44.parentrchild = templchild 45.end if 46.else 2 9 47. parentrchild = temprchild 48.end else temp is a right child 49.end else if 50.FreeNode(temp) 51.end else if
//Case 3 – Delete node with 2 children 52.else 53.parent_inorder_N = temp 54.inorder_N = tempright subtree 2 55.Repeat steps 56,57 Parent_inorder_N while inorder_Nleft ≠ null 1 6 4 56.parent_inorder_N = inorder_N 57.inorder_N = inorder_N  left inorder_N 58.end Repeat 0 3 5 59.tempdata = inorder_Ndata 60. if(inorder_N rchild == null) 6 61. parent_ inorder_Nleft = null 62. end if
63.else // Inorder successor has one child 64. parent_ inorder_Nleft = inorder_Nright 65.end else 66. end else 67.end if 68.else 69.Print “Element not Found” 70.end else 71.end Delete_LinkedList_BST
Algorithm Insert_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1
12.else 1. temp=1; 2. if(Tree[temp] == -1) 13.temp = 2 * temp 14.end else 3.Tree[temp] = element; 15.end if 4. Return; 16. else 5. end if Insert as first node 17. if(Tree[2 * temp+1] == -1) 6. while(1) To find the position 18.Tree[2 * temp+1] == 7. if(Tree[temp] > element) element child 8. if(Tree[2 * temp] == -1) 19.break; 9. Tree[2 * temp] == element 20.end if 10.break; 11. end if Element to be inserted is 6 10 4 15 -1 -1 6 -1 -1 -1 -1
21. else // The right child is occupied 22.temp = 2 * temp + 1 //Move to the right child 23. end else 24. end if 25. end while 26. end Insert_Array_BST
Algorithm Delete_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1 * temp is used to find the subscript of the element to be deleted * inorder_N is the inorder successor
//Search for the ‘element’ in the BST 1. temp = 1 2. while((Tree[temp]!=element) && (Tree[temp] != -1)) // Loop until the element is found 3.if(element < Tree[temp]) 4.temp = 2 * temp // Move left 5.end if 6. else 7.temp = 2 * temp + 1 //Move right Element to be searched is 4 8. end else 9. end while 10 4 15 -1 -1 -1 -1 temp
10. if(Tree[temp] != -1) // If the element is found // Case 1 - Delete leaf node 11.if((Tree[2*temp] == -1) and (Tree[2*temp+1] == -1)) 12.Tree[temp] = -1 13.end if 10 -1 4 15 -1 -1 -1 -1 temp
// Case 2 - Delete node with one child 14.else if((Tree[2*temp] == -1) or (Tree[2*temp+1] == -1)) 15.if(Tree[2*temp] != -1) // Is the child in the left of temp 16.Call Preorder(Tree[1:N], 2*temp) //Update the whole subtree 17.end if 18.else 19.Call Preorder(Tree[1:N], 2*temp+1) 20.end else 21.end else if 10 4 15 -1 7 -1 -1 -1 -1 temp
//Case 3 – Delete node with 2 children 22.else 23.inorder_N = 2*temp+1 // Inorder successor is surely in the right subtree 24.Repeat steps 48,49 while Tree[2*inorder_N] ≠ -1 25.inorder_N = 2*inorder_N 26.end Repeat 27.Tree[temp] = Tree[inorder_N] // Replace with inorder successor 28.if(Tree[2*inorder_N + 1] == -1) // Inorder successor has no child 29.Tree[inorder_N] = -1 30.end if
31.else // Inorder successor has one child 32.Call Preorder(Tree[1:N], 2*inorder_N+1) 33.end else 34.end else 35.end if 36.else 37.Print “Element not Found” 38.end else 39.end Delete_Array_BST
Algorithm Insert_LinkedList_BST(root, element) * root points to the root element of the linked list * ‘element’ is the element to the inserted * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * GetNode() is a function that creates a node with a data part and 2 address parts and assigns null in the address parts
1.temp=root; 2 if(root == null) 3. rootdata = element; Insert as first node 4. Return; 5. end if 6. while(1) Element to be inserted is 4 7. if(tempdata > element) 8. if(templchild == null) 2 temp 9.templchild = GetNode() 10.templchild  data = 1 5 element 10.break; 0 3 8 11.end if
12.else 13.temp = templchild 14.end else 15.end if 16.else 17.if(temprchild == null) Element to be inserted is 4 18.temprchild = GetNode() 2 temp 19.temprchild  data = element 1 5 20.break; 21.end if 0 3 8
12.else 13.temp = temprchild //Move to the right child 23.end else 24.end if 25.end while 26. end Insert_LinkedList_BST Element to be inserted is 4 2 temp 1 5 0 3 8
Algorithm Delete_LinkedList_BST(root) * root is a pointer to the root node * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * temp is used to find the address of the element to be deleted * parent stores the address of the parent of the element to be deleted * inorder_N is the inorder successor * parent_inorder_N is the parent of the inorder successor
//Search for the element 1. temp = root Element to be 2. parent = root searched is 4 3. while((element != tempdata) && (temp != null)) // Loop until the element is found 4.parent = temp 5 5.if(element < tempdata) 6.temp = temp left // Move left 3 7 7.end if 8.else 9.temp = tempright //Move right 2 4 9 10.end else 11.end while
12. If(temp != null) temp is a leaf node Element found 13.if((templchild == null) and (temprchild == null)) 14.if(parent == temp) Only one node 15.root = null 16.end if 17. else if(temp == parentlchild) 18. parentlchild = null 5 19. end else if else 21.parentrchild = null 4 7 22.end else 3 23.FreeNode(temp) 24.end if 2 4
// Case 2 - Delete node with one child else if((templchild == null)or(temprchild == null)) 26.if(parent == temp) 27.if(templchild != null) 28.root = templchild 29.end if root 30.else 4 31.root = temprchild 32.end else 33.end if 2
else if(temp == parentlchild) 35.if(templchild != null) 36.parentlchild = templchild 37.end if temp is a left child 38.else 39.parentlchild = temprchild 40.end else 5 41.end else if else 43.if(templchild != null) 4 7 44.parentrchild = templchild 45.end if 46.else 2 9 47. parentrchild = temprchild 48.end else temp is a right child 49.end else if 50.FreeNode(temp) 51.end else if
//Case 3 – Delete node with 2 children 52.else 53.parent_inorder_N = temp 54.inorder_N = tempright subtree 2 55.Repeat steps 56,57 Parent_inorder_N while inorder_Nleft ≠ null 1 6 4 56.parent_inorder_N = inorder_N 57.inorder_N = inorder_N  left inorder_N 58.end Repeat 0 3 5 59.tempdata = inorder_Ndata 60. if(inorder_N rchild == null) 6 61. parent_ inorder_Nleft = null 62. end if
63.else // Inorder successor has one child 64. parent_ inorder_Nleft = inorder_Nright 65.end else 66. end else 67.end if 68.else 69.Print “Element not Found” 70.end else 71.end Delete_LinkedList_BST
Algorithm Insert_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1
12.else 1. temp=1; 2. if(Tree[temp] == -1) 13.temp = 2 * temp 14.end else 3.Tree[temp] = element; 15.end if 4. Return; 16. else 5. end if Insert as first node 17. if(Tree[2 * temp+1] == -1) 6. while(1) To find the position 18.Tree[2 * temp+1] == 7. if(Tree[temp] > element) element child 8. if(Tree[2 * temp] == -1) 19.break; 9. Tree[2 * temp] == element 20.end if 10.break; 11. end if Element to be inserted is 6 10 4 15 -1 -1 6 -1 -1 -1 -1
21. else // The right child is occupied 22.temp = 2 * temp + 1 //Move to the right child 23. end else 24. end if 25. end while 26. end Insert_Array_BST
Algorithm Delete_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1 * temp is used to find the subscript of the element to be deleted * inorder_N is the inorder successor
//Search for the ‘element’ in the BST 1. temp = 1 2. while((Tree[temp]!=element) && (Tree[temp] != -1)) // Loop until the element is found 3.if(element < Tree[temp]) 4.temp = 2 * temp // Move left 5.end if 6. else 7.temp = 2 * temp + 1 //Move right Element to be searched is 4 8. end else 9. end while 10 4 15 -1 -1 -1 -1 temp
10. if(Tree[temp] != -1) // If the element is found // Case 1 - Delete leaf node 11.if((Tree[2*temp] == -1) and (Tree[2*temp+1] == -1)) 12.Tree[temp] = -1 13.end if 10 -1 4 15 -1 -1 -1 -1 temp
// Case 2 - Delete node with one child 14.else if((Tree[2*temp] == -1) or (Tree[2*temp+1] == -1)) 15.if(Tree[2*temp] != -1) // Is the child in the left of temp 16.Call Preorder(Tree[1:N], 2*temp) //Update the whole subtree 17.end if 18.else 19.Call Preorder(Tree[1:N], 2*temp+1) 20.end else 21.end else if 10 4 15 -1 7 -1 -1 -1 -1 temp
//Case 3 – Delete node with 2 children 22.else 23.inorder_N = 2*temp+1 // Inorder successor is surely in the right subtree 24.Repeat steps 48,49 while Tree[2*inorder_N] ≠ -1 25.inorder_N = 2*inorder_N 26.end Repeat 27.Tree[temp] = Tree[inorder_N] // Replace with inorder successor 28.if(Tree[2*inorder_N + 1] == -1) // Inorder successor has no child 29.Tree[inorder_N] = -1 30.end if
31.else // Inorder successor has one child 32.Call Preorder(Tree[1:N], 2*inorder_N+1) 33.end else 34.end else 35.end if 36.else 37.Print “Element not Found” 38.end else 39.end Delete_Array_BST
Algorithm Preorder(Tree[1:N], root) * Tree is the array holding the tree * root is the subscript of the root node * The empty positions in an array are denoted by -1 1. Tree[ceil(root/2)-1] = Tree[root] 2. Tree[root] = -1 3. if(Tree[2*root] ≠ -1) // A left child exists 4. call Preorder(Tree[], 2 * root) 5. end if 6. if ( Tree[2*root+1] ≠ -1) // Does a right child exist 7. call Preorder(Tree[], 2 * root+1) 8. end if 9. end Preorder
http://datastructuresinterview.blogspot.in/ http://talkcoimbatore.blogspot.in/ http://simpletechnical.blogspot.in/

Insertion and Deletion in Binary Search Trees (using Arrays and Linked Lists)

  • 1.
    (Download file toview animation) Dr. S. Lovelyn Rose PSG College of Technology Coimbatore, India
  • 2.
    Algorithm Insert_LinkedList_BST(root, element) *root points to the root element of the linked list * ‘element’ is the element to the inserted * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * GetNode() is a function that creates a node with a data part and 2 address parts and assigns null in the address parts
  • 3.
    1.temp=root; 2 if(root ==null) 3. rootdata = element; Insert as first node 4. Return; 5. end if 6. while(1) Element to be inserted is 4 7. if(tempdata > element) 8. if(templchild == null) 2 temp 9.templchild = GetNode() 10.templchild  data = 1 5 element 10.break; 0 3 8 11.end if
  • 4.
    12.else 13.temp = templchild 14.endelse 15.end if 16.else 17.if(temprchild == null) Element to be inserted is 4 18.temprchild = GetNode() 2 temp 19.temprchild  data = element 1 5 20.break; 21.end if 0 3 8
  • 5.
    12.else 13.temp = temprchild//Move to the right child 23.end else 24.end if 25.end while 26. end Insert_LinkedList_BST Element to be inserted is 4 2 temp 1 5 0 3 8
  • 6.
    Algorithm Delete_LinkedList_BST(root) * rootis a pointer to the root node * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * temp is used to find the address of the element to be deleted * parent stores the address of the parent of the element to be deleted * inorder_N is the inorder successor * parent_inorder_N is the parent of the inorder successor
  • 7.
    //Search for theelement 1. temp = root Element to be 2. parent = root searched is 4 3. while((element != tempdata) && (temp != null)) // Loop until the element is found 4.parent = temp 5 5.if(element < tempdata) 6.temp = temp left // Move left 3 7 7.end if 8.else 9.temp = tempright //Move right 2 4 9 10.end else 11.end while
  • 8.
    12. If(temp !=null) temp is a leaf node Element found 13.if((templchild == null) and (temprchild == null)) 14.if(parent == temp) Only one node 15.root = null 16.end if 17. else if(temp == parentlchild) 18. parentlchild = null 5 19. end else if else 21.parentrchild = null 4 7 22.end else 3 23.FreeNode(temp) 24.end if 2 4
  • 9.
    // Case 2- Delete node with one child else if((templchild == null)or(temprchild == null)) 26.if(parent == temp) 27.if(templchild != null) 28.root = templchild 29.end if root 30.else 4 31.root = temprchild 32.end else 33.end if 2
  • 10.
    else if(temp ==parentlchild) 35.if(templchild != null) 36.parentlchild = templchild 37.end if temp is a left child 38.else 39.parentlchild = temprchild 40.end else 5 41.end else if else 43.if(templchild != null) 4 7 44.parentrchild = templchild 45.end if 46.else 2 9 47. parentrchild = temprchild 48.end else temp is a right child 49.end else if 50.FreeNode(temp) 51.end else if
  • 11.
    //Case 3 –Delete node with 2 children 52.else 53.parent_inorder_N = temp 54.inorder_N = tempright subtree 2 55.Repeat steps 56,57 Parent_inorder_N while inorder_Nleft ≠ null 1 6 4 56.parent_inorder_N = inorder_N 57.inorder_N = inorder_N  left inorder_N 58.end Repeat 0 3 5 59.tempdata = inorder_Ndata 60. if(inorder_N rchild == null) 6 61. parent_ inorder_Nleft = null 62. end if
  • 12.
    63.else // Inordersuccessor has one child 64. parent_ inorder_Nleft = inorder_Nright 65.end else 66. end else 67.end if 68.else 69.Print “Element not Found” 70.end else 71.end Delete_LinkedList_BST
  • 13.
    Algorithm Insert_Array_BST(Tree[1:N], element) *Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1
  • 14.
    12.else 1. temp=1; 2. if(Tree[temp]== -1) 13.temp = 2 * temp 14.end else 3.Tree[temp] = element; 15.end if 4. Return; 16. else 5. end if Insert as first node 17. if(Tree[2 * temp+1] == -1) 6. while(1) To find the position 18.Tree[2 * temp+1] == 7. if(Tree[temp] > element) element child 8. if(Tree[2 * temp] == -1) 19.break; 9. Tree[2 * temp] == element 20.end if 10.break; 11. end if Element to be inserted is 6 10 4 15 -1 -1 6 -1 -1 -1 -1
  • 15.
    21. else //The right child is occupied 22.temp = 2 * temp + 1 //Move to the right child 23. end else 24. end if 25. end while 26. end Insert_Array_BST
  • 16.
    Algorithm Delete_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1 * temp is used to find the subscript of the element to be deleted * inorder_N is the inorder successor
  • 17.
    //Search for the‘element’ in the BST 1. temp = 1 2. while((Tree[temp]!=element) && (Tree[temp] != -1)) // Loop until the element is found 3.if(element < Tree[temp]) 4.temp = 2 * temp // Move left 5.end if 6. else 7.temp = 2 * temp + 1 //Move right Element to be searched is 4 8. end else 9. end while 10 4 15 -1 -1 -1 -1 temp
  • 18.
    10. if(Tree[temp] !=-1) // If the element is found // Case 1 - Delete leaf node 11.if((Tree[2*temp] == -1) and (Tree[2*temp+1] == -1)) 12.Tree[temp] = -1 13.end if 10 -1 4 15 -1 -1 -1 -1 temp
  • 19.
    // Case 2- Delete node with one child 14.else if((Tree[2*temp] == -1) or (Tree[2*temp+1] == -1)) 15.if(Tree[2*temp] != -1) // Is the child in the left of temp 16.Call Preorder(Tree[1:N], 2*temp) //Update the whole subtree 17.end if 18.else 19.Call Preorder(Tree[1:N], 2*temp+1) 20.end else 21.end else if 10 4 15 -1 7 -1 -1 -1 -1 temp
  • 20.
    //Case 3 –Delete node with 2 children 22.else 23.inorder_N = 2*temp+1 // Inorder successor is surely in the right subtree 24.Repeat steps 48,49 while Tree[2*inorder_N] ≠ -1 25.inorder_N = 2*inorder_N 26.end Repeat 27.Tree[temp] = Tree[inorder_N] // Replace with inorder successor 28.if(Tree[2*inorder_N + 1] == -1) // Inorder successor has no child 29.Tree[inorder_N] = -1 30.end if
  • 21.
    31.else // Inordersuccessor has one child 32.Call Preorder(Tree[1:N], 2*inorder_N+1) 33.end else 34.end else 35.end if 36.else 37.Print “Element not Found” 38.end else 39.end Delete_Array_BST
  • 22.
    Algorithm Insert_LinkedList_BST(root, element) *root points to the root element of the linked list * ‘element’ is the element to the inserted * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * GetNode() is a function that creates a node with a data part and 2 address parts and assigns null in the address parts
  • 23.
    1.temp=root; 2 if(root ==null) 3. rootdata = element; Insert as first node 4. Return; 5. end if 6. while(1) Element to be inserted is 4 7. if(tempdata > element) 8. if(templchild == null) 2 temp 9.templchild = GetNode() 10.templchild  data = 1 5 element 10.break; 0 3 8 11.end if
  • 24.
    12.else 13.temp = templchild 14.endelse 15.end if 16.else 17.if(temprchild == null) Element to be inserted is 4 18.temprchild = GetNode() 2 temp 19.temprchild  data = element 1 5 20.break; 21.end if 0 3 8
  • 25.
    12.else 13.temp = temprchild//Move to the right child 23.end else 24.end if 25.end while 26. end Insert_LinkedList_BST Element to be inserted is 4 2 temp 1 5 0 3 8
  • 26.
    Algorithm Delete_LinkedList_BST(root) * rootis a pointer to the root node * ‘data’ holds the data part of a node * lchild stores the address of the left child * rchild stores the address of the right child * temp is used to find the address of the element to be deleted * parent stores the address of the parent of the element to be deleted * inorder_N is the inorder successor * parent_inorder_N is the parent of the inorder successor
  • 27.
    //Search for theelement 1. temp = root Element to be 2. parent = root searched is 4 3. while((element != tempdata) && (temp != null)) // Loop until the element is found 4.parent = temp 5 5.if(element < tempdata) 6.temp = temp left // Move left 3 7 7.end if 8.else 9.temp = tempright //Move right 2 4 9 10.end else 11.end while
  • 28.
    12. If(temp !=null) temp is a leaf node Element found 13.if((templchild == null) and (temprchild == null)) 14.if(parent == temp) Only one node 15.root = null 16.end if 17. else if(temp == parentlchild) 18. parentlchild = null 5 19. end else if else 21.parentrchild = null 4 7 22.end else 3 23.FreeNode(temp) 24.end if 2 4
  • 29.
    // Case 2- Delete node with one child else if((templchild == null)or(temprchild == null)) 26.if(parent == temp) 27.if(templchild != null) 28.root = templchild 29.end if root 30.else 4 31.root = temprchild 32.end else 33.end if 2
  • 30.
    else if(temp ==parentlchild) 35.if(templchild != null) 36.parentlchild = templchild 37.end if temp is a left child 38.else 39.parentlchild = temprchild 40.end else 5 41.end else if else 43.if(templchild != null) 4 7 44.parentrchild = templchild 45.end if 46.else 2 9 47. parentrchild = temprchild 48.end else temp is a right child 49.end else if 50.FreeNode(temp) 51.end else if
  • 31.
    //Case 3 –Delete node with 2 children 52.else 53.parent_inorder_N = temp 54.inorder_N = tempright subtree 2 55.Repeat steps 56,57 Parent_inorder_N while inorder_Nleft ≠ null 1 6 4 56.parent_inorder_N = inorder_N 57.inorder_N = inorder_N  left inorder_N 58.end Repeat 0 3 5 59.tempdata = inorder_Ndata 60. if(inorder_N rchild == null) 6 61. parent_ inorder_Nleft = null 62. end if
  • 32.
    63.else // Inordersuccessor has one child 64. parent_ inorder_Nleft = inorder_Nright 65.end else 66. end else 67.end if 68.else 69.Print “Element not Found” 70.end else 71.end Delete_LinkedList_BST
  • 33.
    Algorithm Insert_Array_BST(Tree[1:N], element) *Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1
  • 34.
    12.else 1. temp=1; 2. if(Tree[temp]== -1) 13.temp = 2 * temp 14.end else 3.Tree[temp] = element; 15.end if 4. Return; 16. else 5. end if Insert as first node 17. if(Tree[2 * temp+1] == -1) 6. while(1) To find the position 18.Tree[2 * temp+1] == 7. if(Tree[temp] > element) element child 8. if(Tree[2 * temp] == -1) 19.break; 9. Tree[2 * temp] == element 20.end if 10.break; 11. end if Element to be inserted is 6 10 4 15 -1 -1 6 -1 -1 -1 -1
  • 35.
    21. else //The right child is occupied 22.temp = 2 * temp + 1 //Move to the right child 23. end else 24. end if 25. end while 26. end Insert_Array_BST
  • 36.
    Algorithm Delete_Array_BST(Tree[1:N], element) * Tree is an array of n elements representing the BST * ‘element’ is the element to the inserted * The empty positions in an array are denoted by -1 * temp is used to find the subscript of the element to be deleted * inorder_N is the inorder successor
  • 37.
    //Search for the‘element’ in the BST 1. temp = 1 2. while((Tree[temp]!=element) && (Tree[temp] != -1)) // Loop until the element is found 3.if(element < Tree[temp]) 4.temp = 2 * temp // Move left 5.end if 6. else 7.temp = 2 * temp + 1 //Move right Element to be searched is 4 8. end else 9. end while 10 4 15 -1 -1 -1 -1 temp
  • 38.
    10. if(Tree[temp] !=-1) // If the element is found // Case 1 - Delete leaf node 11.if((Tree[2*temp] == -1) and (Tree[2*temp+1] == -1)) 12.Tree[temp] = -1 13.end if 10 -1 4 15 -1 -1 -1 -1 temp
  • 39.
    // Case 2- Delete node with one child 14.else if((Tree[2*temp] == -1) or (Tree[2*temp+1] == -1)) 15.if(Tree[2*temp] != -1) // Is the child in the left of temp 16.Call Preorder(Tree[1:N], 2*temp) //Update the whole subtree 17.end if 18.else 19.Call Preorder(Tree[1:N], 2*temp+1) 20.end else 21.end else if 10 4 15 -1 7 -1 -1 -1 -1 temp
  • 40.
    //Case 3 –Delete node with 2 children 22.else 23.inorder_N = 2*temp+1 // Inorder successor is surely in the right subtree 24.Repeat steps 48,49 while Tree[2*inorder_N] ≠ -1 25.inorder_N = 2*inorder_N 26.end Repeat 27.Tree[temp] = Tree[inorder_N] // Replace with inorder successor 28.if(Tree[2*inorder_N + 1] == -1) // Inorder successor has no child 29.Tree[inorder_N] = -1 30.end if
  • 41.
    31.else // Inordersuccessor has one child 32.Call Preorder(Tree[1:N], 2*inorder_N+1) 33.end else 34.end else 35.end if 36.else 37.Print “Element not Found” 38.end else 39.end Delete_Array_BST
  • 42.
    Algorithm Preorder(Tree[1:N], root) *Tree is the array holding the tree * root is the subscript of the root node * The empty positions in an array are denoted by -1 1. Tree[ceil(root/2)-1] = Tree[root] 2. Tree[root] = -1 3. if(Tree[2*root] ≠ -1) // A left child exists 4. call Preorder(Tree[], 2 * root) 5. end if 6. if ( Tree[2*root+1] ≠ -1) // Does a right child exist 7. call Preorder(Tree[], 2 * root+1) 8. end if 9. end Preorder
  • 43.