二叉搜索树递归搜索元素函数返回结果异常问题排查
代码存在的核心问题
- 缺少空指针边界校验,会触发段错误
代码未判断root是否为NULL就直接访问root->data,当传入空树、或者递归到叶子节点的左右空子节点时,会触发空指针访问异常,程序直接崩溃。 - 丢失递归调用的返回值,查找逻辑完全失效
调用左右子树的search递归函数时,没有将递归的返回值向上传递,除了根节点正好等于目标元素的场景会返回true,其余所有情况不管是否查找到元素,最终都会走到最后的return false,返回结果恒为假。
修正后的参考实现
struct node { int data; struct node *left; /* left tree part */ struct node *right; /* right tree part */ }; bool search(struct node *root, int element) { // 空节点说明未找到目标元素 if (root == NULL) { return false; } if (root->data == element) { return true; } if (root->data < element) { // 向右子树查找,直接返回递归结果 return search(root->right, element); } else { // 向左子树查找,直接返回递归结果 return search(root->left, element); } }
内容的提问来源于stack exchange,提问作者KVL
相关产品推荐
相关产品推荐

