#java #sorting #binary-tree #binary-search-tree
#Ява #сортировка #двоичное дерево #двоичное дерево поиска
Вопрос:
Я новичок в Java и программировании в целом. Код в основном работает. Он может делать все, кроме случаев, когда я ввожу следующее:
- Последовательность:
d, e, f, a, b, c, g, h, i, j.
- Ищите:
b
илиc
Кажется, я не могу найти никаких проблем с кодом, но сузил его до insertNode
модуля/класса, похоже, что пользователи входят в a, b, c
d, e, f,
систему только после a
регистрации узла с левой стороны.
import java.util.Arrays; import java.util.Scanner; import java.lang.reflect.Method; public class BinarySearchTreeTestStackOverflow { class Node { String stringData; Node leftChild; Node rightChild; Node(String stringData) { this.stringData = stringData; leftChild = rightChild = null; } } //root node for the binary tree Node root; //Constructor method public BinarySearchTreeTestStackOverflow() { root = null; } //Insert method for new values in the tree public void insert(String key) { root = insertNode(root, key); } //Insert recursive call for inserting from the root, in the right place public Node insertNode(Node node, String key) { if (node == null) { node = new Node(key); return node; } if (key.compareTo(node.stringData) lt; 0) { node.leftChild = insertNode(node.leftChild, key); } else if (key.compareTo(root.stringData) gt; 0) { node.rightChild = insertNode(node.rightChild, key); } return node; } //Find method asking for the node to find public Node find(String key) { //takes user input and turns it into a node Node node = findNode(root, key); System.out.println("print key to find: " key); return node; } //Find recursive method using the root node. public Node findNode(Node node, String key) { if (key.compareTo(node.stringData) == 0) { return node; } //check up on findNodeMethod if (key.compareTo(node.stringData) lt;= 0) { if (node.leftChild == null) { return null; } else { return findNode(node.leftChild, key); } } else if (key.compareTo(node.stringData) gt; 0) { if (node.rightChild == null) { return null; } else { System.out.println("went right"); //toDelete return findNode(node.rightChild, key); } } return null; } public static void main(String[] args) { BinarySearchTreeTestStackOverflow binaryTree = new BinarySearchTreeTestStackOverflow(); Scanner scanner = new Scanner(System.in); for (int i = 1; i lt;= 10; i ) { System.out.print("Enter string " i " for the tree: "); binaryTree.insert(scanner.nextLine()); } System.out.print("Enter the value to be searched: "); String key = scanner.nextLine(); //correct, verified using - System.out.println("key to be searched: " key); Node node = binaryTree.find(key); if (node == null) { System.out.println("The string does not exist"); } else { System.out.println("Node " node.stringData " was found"); } } }
Ответ №1:
Проблема внутри insertNode()
. Вместо того, чтобы сравнивать с root
:
else if (key.compareTo(root.stringData) gt; 0) { node.rightChild = insertNode(node.rightChild, key); }
вы должны сравнить с node
:
else if (key.compareTo(node.stringData) gt; 0) { node.rightChild = insertNode(node.rightChild, key); }
Комментарии:
1. Это ответ, я так слеп, спасибо тебе! Должен ли я закрывать/удалять этот вопрос, поскольку это так очевидно?…
2. Нет … не закрывайте и не удаляйте.