У меня проблема со вставкой в двоичное дерево, следующий код, кажется, не работает так, как я хочу.
public static <E extends Comparable<? super E>>
boolean inorderInsert(BTree<E> T, E x) {
BTreeNode<E> n = T.getRoot();
if(T.getRoot() == null) {
T.setRoot(new BTreeNode<E>(x));
}
while (n != null) {
if (x.compareTo(n.getElement()) == 0)
return false;
else if (x.compareTo(n.getElement()) < 0)
if(n.getLeftChild()==null) {
n.setLeftChild(new BTreeNode<E> (x));
}
if(n.getLeftChild()!=null) {
n=n.getLeftChild();
}
else
if(x.compareTo(n.getElement()) > 0) {
if(n.getRightChild()==null) {
n.setRightChild(new BTreeNode<E> (x));
}
if(n.getRightChild()!=null ) {
n=n.getRightChild();
}
}
} // while
return true;
}
со следующими входами:
10 3 8 4 10 5 5 18 19 13
код производит следующий вывод:
3 4 5 13 18 19 8 10
вместо:
3 4 5 8 10 13 18 19 10
iдумал о том, чтобы сделать дерево таким образом, чтобы оно выглядело так:
10
__/ \__
3 18
\ / \
8 13 19
/
4
\
5
Я не могу найти, где я ошибся.Любая помощь будет принята с благодарностью.