Informe de resolución de problemas de Leetcode Sword se refiere a la oferta 32 Imprimir series de árboles binarios de arriba a abajo

Sword Finger Offer 32-I. Imprimir árbol binario de arriba a abajo

Imprima cada nodo del árbol binario de arriba a abajo, y los nodos del mismo nivel se imprimen en orden de izquierda a derecha.

P.ej:

Dado un árbol binario: [3,9,20, null, null, 15,7],

    3
   / \
  9  20
    /  \
   15   7

regreso:

[3,9,20,15,7]

responder:

Este es un BFS simple

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<int> levelOrder(TreeNode* root) {
    
    
        vector<int> ans;
        if(root==nullptr)
            return ans;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
    
    			//BFS模板
            TreeNode *temp=q.front();
            q.pop();
            ans.push_back(temp->val);
            if(temp->left!=nullptr)
                q.push(temp->left);
            if(temp->right!=nullptr)
                q.push(temp->right);
        }
        return ans;

    }
};

Sword se refiere a la Oferta 32-II. Imprimir árbol binario de arriba hacia abajo II

El árbol binario se imprime en capas de arriba a abajo, los nodos de la misma capa se imprimen en el orden de izquierda a derecha y cada capa se imprime en una línea.

P.ej:

Dado un árbol binario: [3,9,20, null, null, 15,7],

    3
   / \
  9  20
    /  \
   15   7

Devuelve el resultado de su recorrido de nivel:

[
  [3],
  [9,20],
  [15,7]
]

responder:

En el blog anterior, el recorrido se imprimió en la consola a través de la función Visit (). Aunque este tema es un recorrido de secuencia de capas BFS simple, es más interesante separar los datos de cada capa. Aquí se utiliza una matriz bidimensional.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> ans;
        if(root==nullptr)
            return ans;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
    
    					//BFS模板里面嵌套了每层的操作
            vector<int> t;
            for(int i=q.size();i>0;--i){
    
    
                TreeNode *temp=q.front();
                q.pop();
                t.push_back(temp->val);
                if(temp->left)
                    q.push(temp->left);
                if(temp->right)
                    q.push(temp->right);
            }
            ans.push_back(t);
        }
        return ans;
    }
};

Sword se refiere a la Oferta 32-III. Imprimir árbol binario de arriba hacia abajo III

Implemente una función para imprimir el árbol binario en orden de zigzag, es decir, la primera línea se imprime de izquierda a derecha, la segunda capa se imprime de derecha a izquierda y la tercera línea se imprime de izquierda a derecha. Y así.

P.ej:

Dado un árbol binario: [3,9,20, null, null, 15,7],

    3
   / \
  9  20
    /  \
   15   7

Devuelve el resultado de su recorrido de nivel:

[
  [3],
  [20,9],
  [15,7]
]

responder:

Aquí se utiliza la cola de dos extremos Deque

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> ans;
        if(root==nullptr)
            return ans;
        deque<TreeNode*> q;
        q.push_back(root);
        bool flag=true;
        while(!q.empty()){
    
    					//BFS模板里面嵌套了每层的操作
            vector<int> t;
            for(int i=q.size();i>0;--i){
    
    
                if(flag){
    
    
                    TreeNode *temp=q.front();
                    q.pop_front();
                    t.push_back(temp->val);
                    if(temp->left!=nullptr)
                        q.push_back(temp->left);
                    if(temp->right!=nullptr)
                        q.push_back(temp->right);
                }else{
    
    
                    TreeNode *temp=q.back();
                    q.pop_back();
                    t.push_back(temp->val);
                    if(temp->right!=nullptr)
                        q.push_front(temp->right);
                    if(temp->left!=nullptr)
                        q.push_front(temp->left);
                }
            }
            flag=!flag;
            ans.push_back(t);
        }
        return ans;
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_43477024/article/details/111773307
Recomendado
Clasificación