我正在尝试实现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。我不确定如何将向量中的第一个节点作为根,然后继续从那里开始递归插入。谢谢!
答案 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;
}