[Árbol] B020_ bosque Eliminar punto (recursivo)

Uno, Título Descripción

Given the root of a binary tree, each node in the tree has a distinct value.

After deleting all nodes with a value in to_delete, we are left with a forest (a disjoint union of trees).

Return the roots of the trees in the remaining forest.  You may return the result in any order.

Input: root = [1,2,3,4,5,6,7], to_delete = [3,5]
Output: [[1,2,null,4],[6],[7]]

, La solución segundo problema

Método uno: Secuencia

* El primer escrito, no se dio cuenta de Java se pasa por referencia , directamente de la raíz no es factible,

boolean[] del;
List<TreeNode> res;
public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
  res = new LinkedList<>();
  del = new boolean[1001];
  for (int d : to_delete) del[d] = true;
  
  if (root != null) //1
  	res.add(root);

  dfs(root);     
  return res;
}
void dfs(TreeNode root) {
  if (root == null) 
  	return;
  dfs(root.left);
  dfs(root.right);
  
  if (del[root.val]) {
    del[root.val] = false;
    if (root.left != null)  res.add(root.left);
    if (root.right!= null)  res.add(root.right);
    root = null;
  }
}

* Dos puntos propensos a errores:

  1. No se puede DFS al comienzo de la oración anterior, si la raíz está vacía, porque no puede haber sido borrado del nodo raíz. Si después de DFS búsqueda profunda no está vacío, se demuestra que no se ha eliminado el nodo, que se puede añadir a la res conjunto de resultados como root es la raíz del árbol.
  2. Debido a que Java se pasa por referencia, la referencia a la asignación no cambia el punto de referencia directamente en el proceso, la necesidad de utilizar el valor de retorno y luego de forma recursiva a través del extremo de la asignación.
boolean[] del;
List<TreeNode> res;
public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
  del = new boolean[1050];
  res = new LinkedList<>();
  for (int d : to_delete) del[d] = true;
  //if (root != null) 		1
  //    res.add(root);
  root = dfs(root);
  if (root != null)
     res.add(root);
  return res;
}
private TreeNode dfs(TreeNode root) {
  if (root == null) {
    return null;
  }
  root.left = dfs(root.left);
  root.right= dfs(root.right);
  if (del[root.val]) {
    if (root.left != null)  res.add(root.left);
    if (root.right!= null)  res.add(root.right);
    return null;	//2
  }
  return root;		//2
}

Análisis de la complejidad

  • Complejidad de tiempo: la ( norte ) O (n) ,
  • Espacio de la complejidad: la ( norte / l o g n ) O (n / logn) ,

Segundo método:


Análisis de la complejidad

  • Complejidad de tiempo: O ( ) El () ,
  • Espacio de la complejidad: O ( ) El () ,
Publicados 495 artículos originales · ganado elogios 105 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_43539599/article/details/104882817
Recomendado
Clasificación