递归插入二叉树(geeksforgeeks)

时间:2020-04-12 07:11:11

标签: c++ recursion tree insert binary-search-tree

我正在尝试实现geeksforgeeks.com上使用的插入功能,但是在尝试将其用于当前代码时遇到了一些问题。

我有一个向量,该向量需要将其放入二叉树中。我使用此函数将数字传递到插入函数中:

print=(A|B);

这是插入函数:

void populateTree(vector<string> dataVec) {
    for (int i = 0; i < dataVec.size(); i++) {
        insert(stoi(dataVec[i]), root);
    }
}

新节点功能:

node* insert(int x, node* node) {

    if (node == nullptr)
        return newNode(x);
    if (x < node->data)
        node->left = insert(x, node->left);
    else
        node->right = insert(x, node->right);

    return root;
}

}

Root是类中的私有成员,该成员已初始化为nullptr。我不确定如何将向量中的第一个节点作为根,然后继续从那里开始递归插入。谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题与指针的使用有关。

应该使用node* insert(int x, node* node)node* insert(int x, node** node)而不是使用node* insert(int x, node*& node)并相应地采用您的代码。

以下是更正的示例代码。 See it in execution here

#include <iostream>
#include <vector>
using namespace std;

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

    Node(int v)
    {
        val = v;
        left = right = nullptr;
    }
};


class Tree
{
    Node* root;

    Tree()
    {
        root = nullptr;
    }

    public:

    static void insert(int x, Node*& node)
    {
        if (node == nullptr)
        {
            node = new Node(x);
        }
        else
        {
            if (x < node->val)
                insert(x, node->left);
            else
                insert(x, node->right);
        }
    }

    static Tree* populateTree(vector<string> dataVec)
    {
        Tree* t= new Tree();
        for (int i = 0; i < dataVec.size(); i++)
        {
            insert(stoi(dataVec[i]), t->root);
        }
        return t;
    }

    static void printTree(Node* node, string s)
    {
        if(node == nullptr) return;
        cout<<s<< "+"<<node->val <<endl;
        s += "----";
        printTree(node->left,s);
        printTree(node->right, s);
    }

    static void printTree(Tree* t)
    {
        if(t)
        {
            printTree(t->root, "");
        }
    }
};

int main() {
    Tree* t = Tree::populateTree({"70", "2", "7", "20", "41", "28", "20", "51", "91"});
    Tree::printTree(t);
    return 0;
}