Мне нужно получить корневой узел для проверки сбалансированности дерева
// почему-то работает только с пустыми скобками
tree1.isBalanced();
/* так не работает
tree1.isBalanced(getRootNode());
}
public Node<E> getRootNode() {
return rootNode;
}
public void setRootNode(Node<E> rootNode) {
this.rootNode = rootNode;
}
*/
Почему-то в main не видит поле rootNode и его геттер и сеттеры, которой находится в другом классе в этом же пакете,
public Node<E> rootNode;
public Node<E> getRootNode() {
return rootNode;
}
public void setRootNode(Node<E> rootNode) {
this.rootNode = rootNode;
}
Anonymous #2014154
18 уровень
Не получается извлечь корневой узел в методе main, как это правильно сделать?
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2014154
5 марта 2019, 16:22
Не получается вызвать isBalanced в main с аргументами. Сначала в TreeImpl был один isBalanced (Node node), но main не хотел его принимать, предложил создать isBalanced в интерфейсе Tree, и имплементировать его в TreeImpl. Я так и сделала, интерфейс+еще один пустой isBalanced(), а может и не надо было, может надо было, а надо было как-то по другому, но какие бы аргументы я не указывала при вызове isBalanced(); не получается
0
Anonymous #2014154
5 марта 2019, 16:13
и Node:
import java.util.Objects;
public class Node<E extends Comparable<? super E>> {
public final E value;
public Node<E> leftChild;
public Node<E> rightChild;
public int height;
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height=height;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public Node(E value) {
this.value = value;
}
public E getValue() {
return value;
}
public Node<E> getLeftChild() {
return leftChild;
}
public void setLeftChild(Node<E> leftChild) {
this.leftChild = leftChild;
}
public Node<E> getRightChild() {
return rightChild;
}
public void setRightChild(Node<E> rightChild) {
this.rightChild = rightChild;
}
public boolean shouldLeftChild(E value) {
if ( value.compareTo(getValue()) < 0 ) {
return true;
}
else {
return false;
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Node<?> node = (Node<?>) o;
return Objects.equals(value, node.value);
}
@Override
public int hashCode() {
return Objects.hash(value);
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
'}';
}
0
Anonymous #2014154
5 марта 2019, 16:13
Всего 3 класса помимо Main:
Интерфейс Tree:
public interface Tree<E extends Comparable<? super E>> {
boolean isBalanced();
void add(E value);
boolean find(E value);
}
Класс TreeImpl:
public Node<E> rootNode;
public Node<E> getRootNode() {
return rootNode;
}
public void setRootNode(Node<E> rootNode) {
this.rootNode = rootNode;
}
@Override
public boolean isBalanced() {
return false;
}
@Override
public boolean find(E value) {
Node<E> current = rootNode;
while (current != null) {
if (current.getValue().equals(value)) {
return true;
}
if (current.shouldLeftChild(value)) {
current = current.getLeftChild();
} else {
current = current.getRightChild();
}
}
return false;
}
@Override
public boolean isBalanced() {
return false;
}
public static boolean isBalanced(Node node) {
return (node == null) ||
isBalanced(node.leftChild) &&
isBalanced(node.rightChild) &&
Math.abs(height(node.leftChild) - height(node.rightChild)) <= 1;
}
private static int height(Node node) {
return node == null ? 0 : 1 + Math.max(height(node.leftChild), height(node.rightChild));
}
}
0
Сергеев ВикторMaster
5 марта 2019, 14:37
а импорт есть?
а методы в Note написаны?
а какие аргументы принимают ваши методы?
Без кода нет ответа на вопрос
0