Espada se refiere al algoritmo de búsqueda y seguimiento de la oferta del sexto día (simple)
Pregunta de entrevista 32 - I. Imprimir un árbol binario de arriba a abajo
Tema Descripción
Cada nodo del árbol binario se imprime de arriba a abajo, y los nodos de la misma capa se imprimen de izquierda a derecha.
Por ejemplo:
Dado un árbol binario: [3,9,20,null,null,15,7],
Devoluciones:
[3,9,20,15,7]
ideas
Este es un recorrido jerárquico, un recorrido capa por capa, por lo que no puede usar dfs, solo puede usar bfs, use queue, que es deque en python
código
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
if not root :
return []
q = collections.deque()
q.append(root)
a = []
while q :
t = q.popleft()
if t.left :
q.append(t.left)
if t.right :
q.append(t.right)
a.append(t.val)
return a
La espada se refiere a la Oferta 32 - II Imprime el árbol binario II de arriba hacia abajo
Tema Descripción
El árbol binario se imprime en capas de arriba a abajo, los nodos de la misma capa se imprimen de izquierda a derecha y cada capa se imprime en una línea.
Muestra
La descripción de entrada es la misma que la del tema anterior , y la
descripción de salida es la siguiente:
[
[3],
[9,20],
[15,7]
]
ideas
La idea básica es similar al tema anterior, excepto que la forma de almacenar los resultados es diferente.
código
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root :
return []
q = collections.deque()
res = []
q.append(root)
while q:
tmp = []
for _ in range(len(q)):
t = q.popleft()
tmp.append(t.val)
if t.left :
q.append(t.left)
if t.right :
q.append(t.right)
res.append(tmp)
return res
La espada se refiere a la Oferta 32 - III Imprime el árbol binario III de arriba hacia abajo
Tema Descripción
Implemente una función para imprimir el árbol binario en orden de zigzag, es decir, la primera línea se imprime en orden de izquierda a derecha, la segunda capa se imprime en orden de derecha a izquierda, la tercera línea se imprime en orden de izquierda a derecha. orden a la derecha, y la otra línea y así sucesivamente.
Muestra
La descripción de entrada es la misma que la del tema anterior, y la
descripción de salida es la siguiente
[
[3],
[20,9],
[15,7]
]
ideas
El método de escritura es similar al tema anterior, cuando se almacena una matriz bidimensional, se juzga de izquierda a derecha o de derecha a izquierda según el subíndice del número de filas.
código
codigo c++
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
que.push(root);
vector<vector<int>> g;
vector<int> tmp;
if(!root)return g;
while(!que.empty()){
int len = que.size();
tmp.clear();
while(len--){
TreeNode* t = que.front();
que.pop();
tmp.push_back(t->val);
if(t->left){
que.push(t->left);
}
if(t->right){
que.push(t->right);
}
}
g.push_back(tmp);
}
for(int i=1;i<g.size();i+=2){
reverse(g[i].begin(),g[i].end());
}
return g;
}
};
código pitón
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root :
return []
q = collections.deque()
res = []
q.append(root)
i = 0
while q:
i = i + 1
tmp = collections.deque()
for _ in range(len(q)):
t = q.popleft()
if i%2==1 :
tmp.append(t.val)
else :
tmp.appendleft(t.val)
if t.left :
q.append(t.left)
if t.right :
q.append(t.right)
res.append(list(tmp))
return res
Si este artículo es útil para mis amigos, espero darle un me gusta y apoyo ~ Muchas gracias ~