не пустой метод для обхода двоичного дерева - PullRequest
1 голос
/ 29 сентября 2011

Мне интересно, возможно ли иметь метод обхода дерева порядков в java на самом деле ВОЗВРАЩАТЬ что-то ... Я пытаюсь пройти через дерево, заданное узлом и значением, вернуть узел, который соответствует значению:

/**
 * Variable for storing found node from inorder search
 */
private Node returnNode; 


/**
 * Perform an inorder search through tree.
 * If a value is matched, the node is saved to returnNode, otherwise return null.
 * @param node The given node
 * @param value The value of the node to be found.
 */
public void inorder(Node node, Object value){
    if(node != null){
        inorder(node.leftChild, value);
        if(node.value.equals(value)){
            System.out.println(value + " was found at " + node);
            returnNode = node;
        }
        inorder(node.rightChild, value);
    }
}

Сейчас я пытался объявить публичный узел для хранения значения, но я обнаружил, что это не работает, когда я запускаю:

assertEquals(newNode3, BT.contains("3"));
assertEquals(null, BT.contains("abcd"));

Где returnNode вступает в силузначения newNode3 и испортил мои тесты на ноль.

Может кто-нибудь направить меня в правильном направлении?

1 Ответ

2 голосов
/ 29 сентября 2011

Я бы подумал, что вы захотите что-то вроде этого:

/**
 * Perform an inorder search through tree.
 * The first node in order that matches the value is returned, otherwise return null.
 * @param node The given node
 * @param value The value of the node to be found.
 * @return The first node that matches the value, or null
 */
public Node inorder(Node node, Object value){
    Node result = null;
    if(node != null){
        result = inorder(node.leftChild, value);
        if( result != null) return result;

        if(node.value.equals(value)){
            System.out.println(value + " was found at " + node);
            return node;
        }
        result = inorder(node.rightChild, value);
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...