Título
Implemente una clase de iterador de árbol de búsqueda binaria BSTIterator, que representa un iterador que atraviesa el árbol de búsqueda binaria (BST) en orden:
BSTIterator (TreeNode root) inicializa un objeto de la clase BSTIterator. La raíz del nodo raíz de la BST se proporcionará como parte del constructor
. El puntero debe inicializarse a un número que no existe en la BST, y el número es menor que cualquier elemento en la BST.
boolean hasNext () Devuelve verdadero si hay números atravesando a la derecha del puntero; de lo contrario, devuelve falso.
int next () mueve el puntero hacia la derecha y luego devuelve el número en el puntero.
Tenga en cuenta que el puntero se inicializa a un número que no existe en la BST, por lo que la primera llamada a next () devolverá el elemento más pequeño en la BST.
Puede suponer que la llamada a next () siempre es válida, es decir, cuando se llama a next (), hay al menos un número siguiente en el recorrido en orden de la BST.
Ejemplo:
输入
[“BSTIterator”, “siguiente”, “siguiente”, “hasSiguiente”, “siguiente”, “hasSiguiente”, “siguiente”, “hasSiguiente
”, “siguiente”, “hasSiguiente”]
[[[7, 3, 15 , nulo, nulo, 9, 20]], [], [], [], [], [], [], [], [], []]
输出
[nulo, 3, 7, verdadero, 9, verdadero, 15, verdadero, 20, falso]
Interpretar
BSTIterator bSTIterator = new BSTIterator ([7, 3, 15, null, null, 9, 20]);
bSTIterator.next (); // devuelve 3
bSTIterator.next (); // devuelve 7
bSTIterator.hasNext (); // devuelve True
bSTIterator.next (); // devuelve 9
bSTIterator.hasNext (); // devuelve True
bSTIterator.next (); // devuelve 15
bSTIterator.hasNext (); // devuelve True
bSTIterator.next (); // devuelve 20
bSTIterator.hasNext (); // devuelve False
inmediato:
El número de nodos en el árbol está dentro del rango [1, 105]
0 <= Node.val <= 106
Llamar hasNext y operaciones siguientes hasta 105 veces
Avanzado:
¿Puede diseñar una solución que cumpla con las siguientes condiciones? Las operaciones next () y hasNext () tienen una complejidad de tiempo promedio de O (1) y usan memoria O (h). Donde h es la altura
del árbol .
Condiciones complementarias
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;
}
}
Ideas para resolver problemas
Recorre en orden medio, coloca los nodos del árbol en una lista
Demostración de código
class BSTIterator {
List<Integer> list=new ArrayList<>();
//定义两个变量,count作为一个指针在list中遍历,num存放list的大小
int count=0;
int num=0;
public BSTIterator(TreeNode root) {
digui(root);
}
//用递归左右子树按照中序遍历入树
public void digui(TreeNode root)
{
if(root.left!=null)
{
digui(root.left);
list.add(root.val);
}
else
{
list.add(root.val);
}
if(root.right!=null)
digui(root.right);
num=list.size();
}
public int next() {
return hasNext() ? list.get(count++) : null;
}
public boolean hasNext() {
return count<=num-1 ;
}
}
efecto
La
respuesta de información fue exitosa:
tiempo de ejecución: 22 ms, derrotando al 95.60% de los usuarios de Java
Consumo de memoria: 41.5 MB, derrotando al 99.75% de los usuarios de Java