Leetcode701. Insertar operación en árbol de búsqueda binaria (insertar-en-un-árbol-de-búsqueda-binaria)

Insertar operación en árbol de búsqueda binaria

Dado el nodo raíz del árbol de búsqueda binaria (BST) y el valor que se insertará en el árbol, inserte el valor en el árbol de búsqueda binaria. Devuelve el nodo raíz del árbol de búsqueda binaria después de la inserción. Los datos de entrada garantizan que el nuevo valor es diferente de cualquier valor de nodo en el árbol de búsqueda binario original.

Tenga en cuenta que puede haber varios métodos de inserción efectivos, siempre que el árbol siga siendo un árbol de búsqueda binario después de la inserción. Puede devolver cualquier resultado válido.

P.ej,

Dado un árbol de búsqueda binario:

    4
   / \
  2   7
 / \
1   3

Y el valor insertado: 5
Puede devolver este árbol de búsqueda binaria:

     4
   /   \
  2     7
 / \   /
1   3 5

O este árbol también es válido:

     5
   /   \
  2     7
 / \   
1   3
     \
      4

rápido:

  • Un número dado de nodos entre el árbol 0y 10^4entre
  • Cada nodo tiene un valor entero único en el rango de 0a10^8
  • -10^8 <= val <= 10^8
  • El nuevo valor es diferente del valor de cualquier nodo en el árbol de búsqueda binario original.

Código e ideas

Método iterativo

  • Si la raíz está vacía, el nuevo nodo del árbol se puede devolver como nodo raíz.
  • De lo contrario:
    1. Inicialice cur para que apunte a la raíz.
    2. Compare la relación de tamaño entre cur.val y el valor objetivo:
      si cur.val es mayor que el valor objetivo, significa que el valor objetivo debe insertarse en el subárbol izquierdo de cur; si cur.left es nulo, significa que esta es la posición donde se puede insertar el valor objetivo. Simplemente inserte y regrese; de ​​lo contrario, cur apunta a cur.left y repita el paso 2;
      si cur.val es menor que el valor objetivo, el valor objetivo debe insertarse en el subárbol derecho de cur. Si cur.right es nulo, significa que esta es la posición donde se puede insertar el valor objetivo, simplemente inserte y vuelva; de lo contrario, cur apunta a cur.right, repita el paso 2.
/**
 * 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 insertIntoBST(TreeNode root, int val) {
    
    
        TreeNode node = new TreeNode(val);
        if (root == null) {
    
    
            return node;
        }

        TreeNode cur = root;
        while (true) {
    
    
            if (cur.val > val) {
    
    
                if (cur.left == null) {
    
    
                    cur.left = node;
                    break;
                }
                cur = cur.left;
            } else {
    
    
                if (cur.right == null) {
    
    
                    cur.right = node;
                    break;
                } 
                cur = cur.right;
            }
        }
        return root;
    }
}

Recursividad

  • Si la raíz está vacía, el nuevo nodo del árbol se puede devolver como nodo raíz.
    De lo contrario, compare la relación entre root.val y el valor objetivo:
  • Si root.val es mayor que el valor objetivo, significa que el valor objetivo debe insertarse en el subárbol izquierdo de root. El problema es insertar el valor objetivo en root.left y llamar a la función actual de forma recursiva;
  • Si root.val es menor que el valor objetivo, significa que el valor objetivo debe insertarse en el subárbol derecho de root. El problema es insertar el valor objetivo en root.right y llamar a la función actual de forma recursiva.
class Solution {
    
    
    public TreeNode insertIntoBST(TreeNode root, int val) {
    
    
        if (root == null) {
    
    
            return new TreeNode(val);
        }

        if (root.val < val) {
    
    
            root.right = insertIntoBST(root.right, val);
        } else {
    
    
            root.left = insertIntoBST(root.left, val);
        }
        return root;
    }
}

Transferencia de cariño

Supongo que te gusta

Origin blog.csdn.net/e891377/article/details/108889562
Recomendado
Clasificación