【问题标题】:Creating a binary tree out of string. Ex: 1,2,3,#,#,4,5,#,#,#,#,用字符串创建二叉树。例如:1,2,3,#,#,4,5,#,#,#,#,
【发布时间】:2020-08-06 15:21:13
【问题描述】:

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

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;
}

【问题讨论】:

    标签: c++ pointers data-structures binary-tree breadth-first-search


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我的假设不正确,当我在左右子树中创建新的 TreeNode 时,它​​们将被用作新节点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2017-07-01
    相关资源
    最近更新 更多