У меня немного другая реализация BST, и мне немного сложно работать с ней. Я рассмотрел случай, когда у узла есть правильное поддерево, но не знаю, как создать родительскую ссылку, когда поддерева нет. Я убрал из кода некоторые другие методы, такие как самый большой, самый маленький, чтобы сделать его короче
public class NonEmptyBinaryTree <T extends Comparable<T>> extends BinaryTree<T> {
T data; // data of the root node of this tree
BinaryTree<T> left, right; // left and right sub-trees
/**
* Create a NonEmptyBinaryTree tree with root node.
* The tree will not have sub-trees.
*
* @param data the data of the root node.
*/
public NonEmptyBinaryTree(T data) {
this.data = data;
left = new EmptyBinaryTree<T>();
right = new EmptyBinaryTree<T>();
}
public static void main(String[] args) {
NonEmptyBinaryTree tree = new NonEmptyBinaryTree(7); //Root node
tree.insert(3);
tree.insert(4);
tree.insert(12);
tree.insert(10);
tree.insert(2);
tree.insert(9);
tree.insert(18);
System.out.println(tree.successor(12));
}
/**
* Create a NonEmptyBinaryTree with left and right sub-trees
* @param data value of the root node
* @param left sub-tree of the new NonEmptyBinaryTree tree
* @param right sub-tree of the new NonEmptyBinaryTree tree
*/
public NonEmptyBinaryTree(T data, BinaryTree<T> left, BinaryTree<T> right) {
this.data = data;
this.left = left;
this.right = right;
}
@Override
public T successor(T d) {
T datas = null;
// T parent;
if (d.compareTo(this.data) < 0){ //If its less than the root
parent = this.data;
return left.successor(d);}
if (d.compareTo(this.data) > 0){ //If its less than the root
parent = this.data;
return right.successor(d);}
if (d.equals(this.data)){ //We found the node
datas = this.data;
if (this.right!=null)
datas = this.right.smallest();
// if (this.right==null)
//When there is no right child
}
return datas;
}