【发布时间】:2021-07-31 18:22:49
【问题描述】:
我想用向量实现一个 BST 类,但不知何故它不起作用。我只是想知道它不起作用的原因。
我能想到 BST 中的那个根始终保持 NULL 的主要原因。
我想尝试在数据结构中使用类的方法。
#include<iostream>
#include<vector>
using namespace std;
class Node{
public:
int data;
Node* left ;
Node* right ;
Node(int val){
data = val;
left = NULL;
right = NULL;
}
};
class BST{
public:
Node* root = NULL;
void insert(Node* r,int data){
Node* new_node = new Node(data);
if(r == NULL){
r = new_node;
}
if(data < r->data){
if(r->left == NULL){
r->left = new_node;
}
else{
insert(r->left,data);
}
}else if(data > r->data){
if(r->right == NULL){
r->right = new_node;
}
else{
insert(r->right,data);
}
}else{
return;
}
return;
}
BST(vector<int> bst_array){
for(int i = 0; i<bst_array.size(); i++){
insert(root,bst_array[i]);
}
}
void print_t(Node* r){
if(r == NULL){
cout<<"NULL";
return;
}
else{
print_t(r->left);
cout<<r->data<<" ";
print_t(r->right);
}
}
};
int main(){
vector<int> v = {1,3,5,44,23,78,21};
BST* tr = new BST(v);
tr->print_t(tr->root);
return 0;
}
我这边好像有逻辑错误,请帮我找出来。
提前致谢。
【问题讨论】:
-
你的调试器说什么?
-
什么都没有。它只是每次都进入 if(r == NULL) [print_t(Node* r) 语句。
-
然后上一步了解为什么
r是一个空指针,而你不希望是空指针。 -
因为
r = new_node中的insert最终对函数的调用者意味着nothing。r按值传递给insert。更改它不会影响调用者对该值的调用副本。root在通话后仍然为空,而且作为奖励,您泄漏内存只是为了在伤口上撒盐。 -
“它不工作” - 这是对您的问题的无用描述,涵盖了从编译失败到意外释放 Skynet 的所有内容。什么具体不起作用?您观察到什么让您相信存在错误?
标签: c++ tree c++14 binary-tree