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],
inserte la descripción de la imagen aquí

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 ~

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/weixin_46627433/article/details/122959376
Recomendado
Clasificación