This is a Java Program to to delete a particular node from the tree without using recursion.
Here is the source code of the Java Program to Delete a Particular Node in a Tree Without Using Recursion. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a java program to delete a particular node from the tree without using a recursion
import java.util.Scanner;
class BinaryNode
{
private int Key;
private Object Data;
private BinaryNode Left;
private BinaryNode Right;
public BinaryNode(int k, Object d)
{
Key = k;
Data = d;
Left = null;
Right = null;
}
// Get Operations
public int gKey()
{
return Key;
}
public Object gData()
{
return Data;
}
public BinaryNode gLeft()
{
return Left;
}
public BinaryNode gRight()
{
return Right;
}
// Set Operations
public void sKey(int AValue)
{
Key = AValue;
}
public void sData(Object AValue)
{
Data = AValue;
}
public void sLeft(BinaryNode AValue)
{
Left = AValue;
}
public void sRight(BinaryNode AValue)
{
Right = AValue;
}
}
public class BTree
{
private BinaryNode Root;
private int NoOfNodes;
private BTree()
{ // constructor
Root = null;
NoOfNodes = 0;
}
public boolean IsEmpty()
{
return (NoOfNodes == 0);
}
public BinaryNode gRoot()
{
return Root;
}
public int Count()
{
return NoOfNodes;
}
public int Size(BinaryNode ATree)
{
if (ATree == null)
return 0;
else
return (1 + Size(ATree.gLeft()) + Size(ATree.gRight()));
}
public int Height(BinaryNode ATree)
{
if (ATree == null)
return 0;
else
return (1 + Math.max(Height(ATree.gLeft()), Height(ATree.gRight())));
}
public void PreOrder(BinaryNode ATree)
{
if (ATree != null)
{
System.out.print(ATree.gKey() + " ");
PreOrder(ATree.gLeft());
PreOrder(ATree.gRight());
}
}
public void InOrder(BinaryNode ATree)
{
if (ATree != null)
{
InOrder(ATree.gLeft());
System.out.print(ATree.gKey() + " ");
InOrder(ATree.gRight());
}
}
public void PostOrder(BinaryNode ATree)
{
if (ATree != null)
{
PostOrder(ATree.gLeft());
PostOrder(ATree.gRight());
System.out.print(ATree.gKey() + " ");
}
}
public void Insert(int AId, Object AValue)
{
BinaryNode Temp, Current, Parent;
if (Root == null)
{
Temp = new BinaryNode(AId, AValue);
Root = Temp;
NoOfNodes++;
} else
{
Temp = new BinaryNode(AId, AValue);
Current = Root;
while (true)
{
Parent = Current;
if (AId < Current.gKey())
{
Current = Current.gLeft();
if (Current == null)
{
Parent.sLeft(Temp);
NoOfNodes++;
return;
}
} else
{
Current = Current.gRight();
if (Current == null)
{
Parent.sRight(Temp);
NoOfNodes++;
return;
}
}
}
}
}
public BinaryNode Find(int AKey)
{
BinaryNode Current = null;
if (!IsEmpty())
{
Current = Root; // start search at top of tree
while (Current.gKey() != AKey)
{
if (AKey < Current.gKey())
Current = Current.gLeft();
else
Current = Current.gRight();
if (Current == null)
return null;
}
}
return Current;
}
public BinaryNode GetSuccessor(BinaryNode ANode)
{
BinaryNode Current, Successor, SuccessorParent;
Successor = ANode;
SuccessorParent = ANode;
Current = ANode.gRight();
while (Current != null)
{
SuccessorParent = Successor;
Successor = Current;
Current = Current.gLeft();
}
if (Successor != ANode.gRight())
{
SuccessorParent.sLeft(Successor.gRight());
Successor.sRight(ANode.gRight());
}
return Successor;
}
public boolean Delete(int AKey)
{
BinaryNode Current, Parent;
boolean IsLeftChild = true;
Current = Root;
Parent = Root;
while (Current.gKey() != AKey)
{
Parent = Current;
if (AKey < Current.gKey())
{
IsLeftChild = true;
Current = Current.gLeft();
} else
{
IsLeftChild = false;
Current = Current.gRight();
}
if (Current == null)
return false;
}
if (Current.gLeft() == null && Current.gRight() == null)
{
if (Current == Root)
Root = Current.gLeft();
else if (IsLeftChild)
Parent.sLeft(Current.gRight());
else
Parent.sRight(Current.gRight());
}
else
{
if (Current.gRight() == null)
{
if (Current == Root)
Root = Current.gRight();
else if (IsLeftChild)
Parent.sLeft(Current.gLeft());
else
Parent.sRight(Current.gLeft());
}
else
{
if (Current.gLeft() == null)
{
if (Current == Root)
Root = Current.gLeft();
else if (IsLeftChild)
Parent.sLeft(Current.gRight());
else
Parent.sRight(Current.gRight());
}
else
{
BinaryNode Successor = GetSuccessor(Current);
if (Current == Root)
Root = Successor;
else if (IsLeftChild)
Parent.sLeft(Successor);
else
Parent.sRight(Successor);
Successor.sLeft(Current.gLeft());
}
}
}
NoOfNodes--;
return true;
}
public static void main(String[] Args)
{
BTree MyTree = new BTree();
BinaryNode NodeAt;
System.out.println("Enter the elements in the tree");
int N = 5;
Scanner sc = new Scanner(System.in);
for (int i = 0; i < N; i++)
MyTree.Insert(sc.nextInt(), i);
System.out.print("\nInorder : ");
MyTree.InOrder(MyTree.gRoot());
System.out.print("\nPreorder : ");
MyTree.PreOrder(MyTree.gRoot());
System.out.print("\nPostorder : ");
MyTree.PostOrder(MyTree.gRoot());
System.out.println("\nEnter the element to be deleted: ");
int delete = sc.nextInt();
MyTree.Delete(delete);
System.out.print("\nInorder : ");
MyTree.InOrder(MyTree.gRoot());
System.out.print("\nPreorder : ");
MyTree.PreOrder(MyTree.gRoot());
System.out.print("\nPostorder : ");
MyTree.PostOrder(MyTree.gRoot());
sc.close();
}
}
Output:
$ javac BTree.java $ java BTree Enter the elements in the tree 54 12 32 19 45 Inorder : 12 19 32 45 54 Preorder : 54 12 32 19 45 Postorder : 19 45 32 12 54 Enter the element to be deleted: 12 Inorder : 19 32 45 54 Preorder : 54 32 19 45 Postorder : 19 45 32 54
Related posts:
Ways to Iterate Over a List in Java
Guide To CompletableFuture
Inject Parameters into JUnit Jupiter Unit Tests
Java Program to Implement RenderingHints API
An Intro to Spring Cloud Vault
Giới thiệu Aspect Oriented Programming (AOP)
Guide to @ConfigurationProperties in Spring Boot
JWT – Token-based Authentication trong Jersey 2.x
DynamoDB in a Spring Boot Application Using Spring Data
Hướng dẫn Java Design Pattern – Bridge
Guide to the Volatile Keyword in Java
Java Program to Represent Graph Using Adjacency Matrix
Fixing 401s with CORS Preflights and Spring Security
Function trong Java 8
Guide to Mustache with Spring Boot
Cachable Static Assets with Spring MVC
A Guide to the Java LinkedList
Lập trình hướng đối tượng (OOPs) trong java
Java Program to Implement PriorityQueue API
Java Program to Solve TSP Using Minimum Spanning Trees
Intro to Spring Boot Starters
Từ khóa throw và throws trong Java
A Guide to Spring Boot Admin
Bootstrapping Hibernate 5 with Spring
Setting Up Swagger 2 with a Spring REST API
Java Program to Implement Adjacency Matrix
Debugging Reactive Streams in Java
New Stream Collectors in Java 9
Spring @RequestMapping New Shortcut Annotations
Java Program to Implement Range Tree
Java Program to Implement Insertion Sort
Java Program to Implement AttributeList API