アイテムをバイナリツリーに連続した順序で追加するために使用している(幅優先探索アルゴリズムを使用する)次の方法があります。
たとえば、私が持っていた場合
A
/ \
B C
/
D
次の追加は次のようになります。
A
/ \
B C
/ \
D E
私の問題は、値を正しく返す方法がわからないという事実にあります。最初のnullノードに遭遇したとき、そこに値を挿入することを知っていますが、それを何に挿入しますか?キューから取得しているバイナリツリーに挿入すると、それはルートのサブツリー(または追加しようとしているツリー)であるため、それを返すと完全なツリーにはなりません。
これが私が持っているコードです:
public static <T> BinaryTree<T> addToTree(BinaryTree<T> t1, BinaryTree<T> t2) {
Queue<BinaryTree<T>> treeQueue = new LinkedList<BinaryTree<T>>();
while (t1 != null) {
if (t1.getLeft() == null) {
t1.attachLeft(t2);
break;
}
treeQueue.add(t1.getLeft());
if (t1.getRight() == null) {
t1.attachRight(t2);
break;
}
treeQueue.add(t1.getRight());
if (!treeQueue.isEmpty()) t1 = treeQueue.remove();
else t1 = null;
}
return t1;
}