Я работаю над кодом, чтобы построить двоичное дерево и отобразить его для домашнего задания (так что, естественно, мне нужно построить дерево с нуля.) Кодирует функции, однако я не могу как представляется, выяснить способ, чтобы узлы пересекали около 4 уровней вниз по дереву. Я надеюсь, что кто-то может помочь начать мой мозг ... но есть ли способ проверить, сколько уровней дерево вниз, и отрегулировать горизонтальное расстояние между узлами уровней выше? В моих исследованиях я видел несколько других действий, но мой должен быть рекурсивно с помощью метода displayTree() для параметров назначения. Любая помощь приветствуется.Узлы, пересекающиеся в двоичном дереве
P.S. текущая переменная horizontalGap - это то, чем я занимался, поэтому, если это испортится с кодом, я извиняюсь. Вот метод displayTree().
//displayTree() with crossing issue
//**************************************************************************
public void displayTree(Graphics g, Node localTree, int x, int y, int level)
{
// Display the root
int verticalGap = 50;
int horizontalGap = 250/level;
g.drawOval(x, y, radius, radius);
g.drawString(localTree.getKey() + "", x + (radius/4) , y + 20);
if (localTree.getLeft() != null) {
// Draw a line to the left node
lineToLeftChild(g, x - horizontalGap, y + verticalGap, x, y);
// Draw the left subtree recursively
displayTree(g, localTree.leftChild, x - horizontalGap, y + verticalGap, level + 1);
}
if (localTree.rightChild != null) {
// Draw a line to the right node
lineToRightChild(g, x + horizontalGap, y + verticalGap, x, y);
// Draw the right subtree recursively
displayTree(g, localTree.rightChild, x + horizontalGap, y + verticalGap, level + 1);
}
}//end displayTree()
//**************************************************************************
//Line to child
//**************************************************************************
private void lineToLeftChild(Graphics g, int x1, int y1, int x2, int y2) {
g.drawLine(x1 + (radius/2), y1, x2, y2 + (radius/2));
}//end LinetoLeft
//**************************************************************************
//Line to child
//**************************************************************************
private void lineToRightChild(Graphics g, int x1, int y1, int x2, int y2) {
g.drawLine(x1 + (radius /2), y1, (x2 + radius) , y2 + (radius/2));
}//end line to Right()
//**************************************************************************
}