В настоящее время я пытаюсь написать методы, которые проверяют все узлы в двух разных деревьях двоичного поиска и находят узлы с общими ключами между двумя деревьями.(т.е. пытается найти узел из дерева 1 и узел из дерева 2, содержащий те же ключи. Если общий узел найден, метод возвращает значение true, в противном случае он возвращает значение false. Второе дерево хранится в другом объекте, чем дерево1, называется GraphicalObject
. И ключ в форме координат и сравнения размеров выполняется с использованием порядка столбцов.
Я написал следующий код, но мне интересно, есть ли что-то не так или нетчто-нибудь, что я мог бы улучшить?
1) Метод, который проверяет, совпадает ли узел дерева 1 с каждым узлом дерева 2, используя рекурсивные вызовы.метод compareTo
определяется иначе, где.
public boolean findPixel(BinaryNode node1, BinaryNode node2, GraphicalObject gobj) {
//Creating the final coordinate key by altering the original key in nodes of tree 2.
int xCor = node2.getData().getLocation().xCoord() + gobj.getOffset().xCoord() - graphicPos.xCoord();
int yCor = node2.getData().getLocation().yCoord() + gobj.getOffset().yCoord() - graphicPos.yCoord();
Location newLoc = new Location(xCor, yCor); //Creates the final key to be checked up on
if(node1.getData().getLocation().compareTo(newLoc) == 0) { //If keys are the same
return true;
} else {
if(node1.getData().getLocation().compareTo(newLoc) == -1) { //if key from node 1 is smaller than key from node 2.
node2 = node2.getLeft();
findPixel(node1, node2, gobj);
} else {
node2 = node2.getRight();
findPixel(node1, node2, gobj);
}
}
return false;
}
2) Метод, использующий метод findPixel
для проверки каждого узла в дереве 1 и сравнения их с каждым узлом в дереве 2, используя обход по порядку.
private boolean findCommonNode(BinaryNode node1, BinaryNode node2, GraphicalObject gobj) {
if(node1 != null) {
findCommonNode(node1.getLeft(), node2, gobj);
return findPixel(node1, node2, gobj);
findCommonNode(node1.getRight(), node2, gobj);
}
}
3) метод, который возвращает true, если общий узел между двумя деревьями найден, или false в противном случае.
public boolean intersects(GraphicalObject gobj){
BinaryNode tempNode = newTree.getRoot();
BinaryNode tempNode2 = gobj.getTree().getRoot();
if (findCommonNode(tempNode, tempNode2, gobj) == true) {
return true;
} else {
return false;
}
}
Что-то не так с этим кодом?Или я могу что-то сделать, чтобы сделать его лучше или работать эффективнее?