Cómo construir un árbol binario usando una secuencia transversal de orden de nivel

Cómo construir un árbol binario usando una secuencia transversal de orden de nivel, por ejemplo a partir de la secuencia {1,2,3, #, #, 4, #, #, 5}, podemos construir un árbol binario como este:

     1
    / \
   2   3
      /
     4
      \
       5

donde '#' significa un terminador de ruta donde no existe ningún nodo a continuación.

Finalmente implemento el algoritmo de Pham Trung por c ++

struct TreeNode
{
    TreeNode *left;
    TreeNode *right;
    int val;

    TreeNode(int x): left(NULL), right(NULL), val(x) {}
};
TreeNode *build_tree(char nodes[], int n)
{
    TreeNode *root = new TreeNode(nodes[0] - '0'); 
    queue<TreeNode*> q;
    bool is_left = true;
    TreeNode *cur = NULL;
    q.push(root);

    for (int i = 1; i < n; i++) {
        TreeNode *node = NULL;
        if (nodes[i] != '#') {
            node = new TreeNode(nodes[i] - '0');
            q.push(node);
        }

        if (is_left) {
            cur = q.front();
            q.pop();
            cur->left = node;
            is_left = false;
        } else {
            cur->right = node;
            is_left = true;
        }
    }

    return root;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta