LeetCode #897: Окончательный тестовый пример не работает для увеличения дерева поиска заказаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 LeetCode #897: Окончательный тестовый пример не работает для увеличения дерева поиска заказа

Сообщение Anonymous »

Я написал решение для вопроса Leetcode номер 897: Увеличение дерева поиска по порядку, но последний тестовый пример выдал ошибку, в которой говорилось, что найден цикл в TreeNode. Я вручную проследил алгоритм для этого тестового примера, и в моих глазах он выглядит нормально. Нужна помощь в выяснении того, что означает «найденный цикл в TreeNode».
Описание вопроса:
При наличии корня бинарного дерева поиска переставьте дерево в нужном порядке так, чтобы самый левый узел в дереве теперь был корнем дерева, и каждый узел не имел левого дочернего элемента и только одного правого дочернего элемента.
Мое решение прошло успешно для этого тестового примера:
Ввод: [5,3,6,2,4,null,8,1,null,null,null,7,9]
Вывод/ожидание: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
Это тестовый пример, для которого это не сработало:
Ввод: [2,1,4,null,null,3]
Вывод: ошибка — найден цикл в TreeNode
Ожидаемый результат: [1,null,2,null,3,null,4]
P.S. - я знаю, что это может быть не самое лучшее/оптимальное решение, но я придумал именно его, поэтому мне нужно выяснить, почему оно не работает для одного тестового примера.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode increasingBST(TreeNode root) {
TreeNode current = root;
TreeNode newRoot = null;
Queue q = new LinkedList();
Stack stack = new Stack();

while(true){
if(current != null){
stack.push(current);
current = current.left;
}

if(stack.isEmpty()){
break;
}

if(current == null){
current = stack.pop();
q.add(current);

current = current.right;
}
}

newRoot = q.remove();
current = newRoot;
while(!q.isEmpty()){
current.right = q.remove();
current.left = null;
current = current.right;
}

return newRoot;

}
}


Подробнее здесь: https://stackoverflow.com/questions/735 ... earch-tree
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»