Напишите метод combWith, который может быть добавлен в класс IntTree. Метод принимает другое двоичное дерево целых чисел в качестве параметра и объединяет два дерева в новое третье дерево, которое возвращается. Структура нового дерева должна быть объединением структур двух исходных деревьев. Он должен иметь узел в любом месте, где был узел в любом из исходных деревьев (или в обоих). Узлы нового дерева должны хранить целое число, указывающее, у какого из исходных деревьев был узел в этой позиции (1, если только у первого дерева был узел, 2, если только у второго дерева был узел, 3, если у обоих деревьев был узел ).
Например, предположим, что переменные IntTree t1 и t2 были инициализированы и хранят следующие деревья:
t3
+---+
| 3 |
___ +---+ ___
/ \
+---+ +---+
| 3 | | 3 |
+---+ +---+
/ \ / \
+---+ +---+ +---+ +---+
| 3 | | 1 | | 2 | | 3 |
+---+ +---+ +---+ +---+
/ \
+---+ +---+
| 1 | | 2 |
+---+ +---+
Вы можете определить частные вспомогательные методы для решения этой проблемы, но в противном случае вы не можете вызывать какие-либо другие методы класса или создавать какие-либо структуры данных, такие как массивы, списки и т. Д. Ваш метод не должен изменять структуру или содержимое из двух сравниваемых деревьев.
public IntTree combineWith(IntTree t2)
{
IntTree t3 = new IntTree();
while(this.overallRoot != null && t2.overallRoot!= null)
{
t3.overallRoot = new IntTreeNode(3);
// for the 3 combination
if(this.overallRoot.left != null && t2.overallRoot.left != null)
{
t3.overallRoot.left = new IntTreeNode(3) ;
}
if(this.overallRoot.right != null && t2.overallRoot.right != null)
{
t3.overallRoot.right = new IntTreeNode(3) ;
}
// for the 1 combination
if(this.overallRoot.left != null && t2.overallRoot.left == null)
{
t3.overallRoot.left = new IntTreeNode(1) ;
}
if(this.overallRoot.right != null && t2.overallRoot.right == null)
{
t3.overallRoot.right = new IntTreeNode(1) ;
}
// for the 2 combination
if(this.overallRoot.left == null && t2.overallRoot.left != null)
{
t3.overallRoot.left = new IntTreeNode(2) ;
}
if(this.overallRoot.right == null && t2.overallRoot.right != null)
{
t3.overallRoot.right = new IntTreeNode(2) ;
}
}
return t3;
}