C++ 用字符串创建二叉树。例:1,2,3、#、#、4,5、#、#、#、#、#、,

C++ 用字符串创建二叉树。例:1,2,3、#、#、4,5、#、#、#、#、#、,,c++,pointers,data-structures,binary-tree,breadth-first-search,C++,Pointers,Data Structures,Binary Tree,Breadth First Search,我正在使用BFS算法从字符串创建二叉树,我有一个问题: 为什么我要在while循环之后写“TreeNode=tree.front();”而不是“root=tree.front();”。为什么我不能只使用已经创建的树节点根 TreeNode*助手(队列和q){ 字符串数据=q.front();q.pop(); if(data==“#”)返回NULL; 队列树; 树节点*根=新树节点(stoi(数据)); 树。推(根); 而(!tree.empty()){ int size=tree.size();

我正在使用BFS算法从字符串创建二叉树,我有一个问题: 为什么我要在while循环之后写“TreeNode=tree.front();”而不是“root=tree.front();”。为什么我不能只使用已经创建的树节点根

TreeNode*助手(队列和q){
字符串数据=q.front();q.pop();
if(data==“#”)返回NULL;
队列树;
树节点*根=新树节点(stoi(数据));
树。推(根);
而(!tree.empty()){
int size=tree.size();
对于(int i=0;i左=新树节点(stoi(新节点));
推送(节点->左);
} 
字符串newNode=q.front();q.pop();
if(newNode!=“#”){
节点->右=新树节点(stoi(新节点));
推送(节点->右);
}
tree.pop();
}
}
返回根;
}

因为
root
指向树的根,这是函数应该返回的,并且树的根已经确定(它是输入队列的第一个元素)


写入
root=tree.front()
将使最后创建的节点成为树的根,并且树只有一个元素。

谢谢!我有一个错误的假设,即当我在左子树和右子树中创建新的TreeNode时,它们将被用作新节点
TreeNode* helper(queue<string> &q) {
    string data = q.front(); q.pop();
    if (data == "#") return NULL;
    
    queue<TreeNode*> tree;
    TreeNode* root = new TreeNode(stoi(data));
    tree.push(root);

    while(!tree.empty()) {
        int size = tree.size();
        for (int i = 0; i < size; i++) {
            TreeNode* node = tree.front();

            string newNode = q.front(); q.pop();
            if (newNode != "#") {
                node -> left = new TreeNode(stoi(newNode));
                tree.push(node -> left);
            } 

            string newNode = q.front(); q.pop();
            if (newNode != "#") {
                node -> right = new TreeNode(stoi(newNode));
                tree.push(node -> right);
            }

            tree.pop();
        }
    }
    return root;
}