二叉搜索树search函数传入树中不存在的参数时程序崩溃问题
问题根因
当搜索的整数不在二叉搜索树中时,search函数最终会返回NULL,你在main函数中直接对返回的指针执行->data操作,属于空指针解引用,这是程序崩溃的直接原因。你的search函数本身递归逻辑没有问题,不需要修改内部判断条件。
修复方案
- 先接收
search的返回值,做非空校验后再访问成员变量,匹配你预期不存在时输出0的需求,修改main函数的输出逻辑即可:
int main() { node *R = NULL; R = insert(R, 33); insert(R,12); insert(R, 40); insert(R, 36); insert(R, 21); node* res = search(R, 65); if (res == NULL) { cout << 0 << endl; } else { cout << res->data << endl; } }
- 可选补充优化:给
treemax、treemin函数增加入参非空校验,避免传入空树时也出现空指针解引用崩溃:
int treemax(node *root) { if (root == NULL) { // 空树可根据业务需求返回默认值,这里示例返回0 return 0; } while(root->right != NULL) { root = root->right; } return root->data; } int treemin(node *root) { if (root == NULL) { return 0; } while(root->left != NULL) { root = root->left; } return root->data; }
内容的提问来源于stack exchange,提问作者Programvarg
相关产品推荐
相关产品推荐

