【发布时间】:2020-09-09 14:51:44
【问题描述】:
我提供的代码是简单的 BST,只有插入和中序遍历。
struct Node{
int data;
Node* left;
Node* right;
};
Node* create(int data){
Node* node = new Node;
node -> data = data;
node->left=node->right=NULL;
return node;
}
Node* insert(Node* ptr,int item);
void inorder(Node* ptr);
int main(){
Node* root = NULL;
int temp,ch;
root = insert(root, 10);
root = insert(root, 20);
root = insert(root, 30);
inorder(root);
cout<<endl;
}
Node* insert(Node* ptr,int item){
if(ptr==NULL){
cout<<"Inserted "<<item<<endl;
return create(item);
}
if(item<ptr->data){
// ptr = ptr->left;
// ptr = insert(ptr, item)
ptr->left=insert(ptr->left, item);
}
else{
// ptr=ptr->right;
// ptr = insert(ptr, item)
ptr->right=insert(ptr->right, item);
}
return ptr;
}
void inorder(Node* ptr){
if(ptr==NULL)
return;
inorder(ptr->left);
cout<<ptr->data<<" ";
inorder(ptr->right);
}
当我使用时,
ptr = ptr->left;
ptr = insert(ptr, item)
而不是
ptr->left=insert(ptr->left, item);
中序遍历只打印最后插入的元素。
请说明是c++的问题还是我对该概念的理解有误?
【问题讨论】:
-
一个是“将ptr->left的值复制到ptr,改变ptr”另一个是“改变ptr->left”
-
ptr是一个局部变量。重新分配它(根据您的第一个版本)不会影响任何其他对象 -
尝试使用调试器单步调试代码。
标签: c++ pointers binary-search-tree