Compruebe si un árbol binario es un árbol de búsqueda binario o no -- java campo con tree camp codereview Relacionados El problema

Check if a binary tree is a binary search tree or not


3
vote

problema

Español

Esto comprueba si los subárboles izquierdo y derecho son árboles de búsqueda binarios. Si lo son, entonces compara los datos de los nodos con el elemento máximo en el subárbol izquierdo de los nodos y el elemento mínimo en el Sub Tree Derecho de los nodos.

  details0  
Original en ingles

This checks if both the left and right subtrees are binary search trees. If they are, then it compares the nodes data with the maximum element in the nodes' left subtree and minimum element in the nodes' right sub tree.

class Node{     int data;     Node left;     Node right;     Node(int x){         data = x;     } } public class isBST {      public static Node getMin(Node root)     {         while(root.left != null)         {             root = root.left;         }          return root;     }     public static Node getMax(Node root)     {         while(root.right != null)         {             root = root.right;         }          return root;     }     public static boolean isBST(Node root)     {         // for null node         if(root == null )         {             return true;         }         // for single node         if(root.left == null && root.right == null)         {             return true;         }         // for a non null node         if(isBST(root.left ) && isBST(root.right) )         {             if(root.left != null && root.right != null)             {             return root.data < getMin(root.right).data && root.data > getMax(root.left).data;             }             else              {                 if(root.left != null)                 {                     return root.data > getMax(root.left).data;                 }                 else                 {                     return root.data < getMin(root.right).data;                 }             }         }         else         {             return false;         }        }      public static void main(String[] args) {         // TODO Auto-generated method stub         Node root = new Node(5);         root.left = new Node(3);         root.right = new Node(7);         root.left.left = new Node(2);         root.left.right = new Node(4);         root.right.left = new Node(6);         root.right.right = new Node(9);         System.out.println(isBST(root));     }  } 
     

Lista de respuestas

2
 
vote

algunas notas rápidas:

  • Respeto "Fábricas egipcias" para sus estructuras de bloques ( 99887776655443311 , 99887766555443312 , ...), es decir, la abertura del abertura debe estar en la misma línea que la declaración de firma. El estilo que usó (apertura de abertura en una nueva línea) se usa normalmente para C #, no Java.

  • fib k3 podría y debe ser tan inmutable posible:

      fib k4  
  • fib k5 es No es un buen nombre de clase . Los nombres de las clases generalmente son sustantivos . Sugeriría (como ya estaba en la respuesta de otra respuesta actualmente eliminada) fib k6 .

  • fib k7 fib k8 es de manera correcta si asume que el árbol es en realidad un BST. Sin embargo, solo la comprobación de los dos no es un indicador suficiente. Un BST solo es completamente un BST si cada uno y cada uno de los nodos satisfacen la condición que propones. Su código no comprueba eso.

    Debe verificar que cada subárbol sea un BST recursivamente. Aparte de eso, también está asumiendo que el BST está ordenado con los elementos más pequeños a la izquierda. También es correcto que se ordene un BST con elementos más pequeños a la derecha. Su código tampoco se ocupa de eso.

En general, su código no resuelve correctamente el problema. Para remediar esto, le sugiero que invierte un tiempo en la prueba de unidad de su código. Además, está ignorando las convenciones sobre el refuerzo (pero usted es coherente, por lo que es algo aceptable), así como los nombres de las clases (eso no es aceptable).

 

Some quick notes:

  • Respect "Egyptian Braces" for your block structures (if, while, ...) i.e., the opening brace should be on the same line as the signature statement. The style you used (opening brace on a new line) is ordinarily used for C#, not Java.

  • Node could and should be as immutable as possible:

    class Node {     final int data;     Node left;     Node right;     Node (int x) {         data = x;     } } 
  • isBST is not a good class name. Class names are usually nouns. I'd suggest (as was already in the currently deleted other answer) BinarySearchTreeUtil.

  • getMin and getMax are factually only correct if you assume that the Tree is actually a BST. Only checking for those two is not a sufficient indicator, though. A BST is only fully a BST if each and every node satisfies the condition you propose. Your code does not check for that.

    You should instead verify that each subtree is a BST recursively. Aside from that you're also assuming that the BST is ordered with the smaller elements to the left. It's also correct for a BST to be ordered with smaller elements to the right. Your code doesn't deal with that either.

Overall your code does not correctly solve the problem. To remedy this I strongly suggest you invest some time into unit-testing your code. Furthermore, you're disregarding conventions about bracing (but you're consistent so it's somewhat acceptable), as well as class-names (that's not acceptable).

 
 

Relacionados problema

2  Eliminación de un nodo en un árbol de búsqueda binario  ( Deletion of a node in a binary search tree ) 
Estoy buscando ver si mi implementación del método de eliminación / eliminación en un árbol de búsqueda binario es suficiente, legible y se ejecuta en un tiem...

12  Codificación de árbol binario  ( Binary tree encoding ) 
Implementé una solución a este desafío de codificación en el código de golf. Tengo experiencia decente con C / C ++, pero ha sido un tiempo desde que los us...

3  Incrustar un HTML (cadena) generado de un árbol estructurado de árbol  ( Embedding an html string generated from a tree structured json ) 
Cómo hacer insertJson3 FASTER (¿Debería mantener el script compatible con versiones anteriores de IE y otros navegadores)? Problema innerHTML de este ...

4  Eliminar nodos alternativos de una lista vinculada  ( Delete alternate nodes of a linked list ) 
Si la lista vinculada es 1- & gt; 2- & gt; 3- & gt; 4 entonces la salida debe ser 1- & gt; 3. Si la lista vinculada es 1- & gt; 2- & gt; 3- & gt; 4- & gt; 5,...

2  Montón Binomial en Java  ( Binomial heap in java ) 
Tengo esta implementación de un montón de binomio que proporciona inserto, disminución de la tecla y el extracto en el tiempo logarítmico. minpriorityqueue...

13  Árbol de búsqueda binaria - C ++  ( Binary search tree c ) 
Estoy implementando varias estructuras de datos en un intento por aprender C ++. A continuación se muestra un árbol de búsqueda binario que he implementado pa...

1  Retire todos los nodos que no se encuentren en ningún camino con suma> = k  ( Remove all nodes which dont lie in any path with sum k ) 
Dado un árbol binario, una ruta completa se define como un camino desde la raíz a una hoja. La suma de todos los nodos en ese camino se define como la suma d...

4  Función abstracta del mapa del árbol  ( Abstract tree map function ) 
Ejercicio 2.31. Resumen tu respuesta Para ejercer 2.30 para producir un Procedimiento Árbol - Mapa con la propiedad. ese árbol cuadrado podría definirs...

11  Patrones compuestos y de visitantes para la funcionalidad de la encuesta basada en árboles en C #  ( Composite and visitor patterns for tree based survey functionality in c ) 
He escrito alguna funcionalidad de encuesta para un proyecto. Básicamente, un formulario de encuesta genérico que se puede componer de secciones y preguntas. ...

2  Implementación de árboles de búsqueda de ternarios en Python 3  ( Ternary search tree implementation in python 3 ) 
He implementado un árbol de búsqueda ternario. Funciona bien. Pero si crees que algo necesita mejorarse, dígalo. Este código fue probado en Python 3.7.4. c...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos