Я написал решение для проверки действительности двоичного дерева поиска с помощью LinkedList, и это доказывает неверную информацию о действительности. Я проверил с действующим BST, и он возвращает, что дерево недействительно. Код выглядит следующим образом,Почему решение для бинарного дерева поиска не работает?
public static boolean isValidBST_(Node root){
boolean bol = false;
LinkedList<Node> queue = new LinkedList<Node>();
queue.add(root);
while(!queue.isEmpty()){
Node cur = queue.poll();
if ((cur.left != null && cur.data > cur.left.data) || (cur.right != null && cur.data < cur.right.data )){
return bol;
}
if (cur.left != null){
queue.offer(cur.left);
}
if (cur.right != null){
queue.offer(cur.right);
}
} // WHILE
if (queue.isEmpty()){
bol = true;
}
return bol;
}
Как я могу улучшить код?
Я делаю звонок от основной следующим образом,
public static void main (String[] args){
Node root = new Node(5);
root.left = new Node(3);
root.right = new Node(7);
root.left.left = new Node(1);
root.left.right = new Node(4);
root.right.left = new Node(6);
root.right.right = new Node(9);
System.out.println("Does the inserted BST is valid ? Answer: " + isValidBST_(root));
}
Почему вы назвали вашим 'LinkedList'' "queue" '? –
Ох, это не намеренно, скажем LinkedList lis –
Я думал, что могу перебирать все дерево внутри цикла while и проверять, больше ли значение узла больше, чем его левый узел (если есть) и значение узел меньше, чем правый узел (если существует). Благодарю. –