I have implemented a simple Binary Search Tree. I want to create a subclass Red-Black Tree, but I'm having problems. The code for the BST is as follows, with the irrelevant details removed. The BST works perfectly fine.
Node:
public Node {
private int key;
public Node left;
public Node right;
public Node parent;
public Node(int key){
// init
}
}
BST:
public BinarySearchTree {
protected Node root;
public void insert(int key){
Node insertNode = new Node(key); // This is problematic
// perform insertion
}
}
I need to subclass Node
to add a color property:
RbtNode:
public RbtNode extends Node {
private boolean isBlack;
public RbtNode(int key){
// init
}
}
And the RedBlackTree
class
RedBlackTree
public RedBlackTree {
public void insert(int key){
super.insert(key);
// perform RBT fixes
}
}
As you can see, I want to reuse the insert
method of BinarySearchTree
, but since it inserts a Node
and not an RbtNode
, it won't work.
A solution I came up with is to create a separate method createNode(int key)
that I can override, but I would need to do quite a bit of typecasting when accessing/manipulating nodes on the subclass.
Is there any cleaner solution, preferrably one without typecasts?
EDIT: The problem is when calling super.insert
from the subclass (RedBlackTree), it uses the parent's root
field instead of the subclass's root
field.