我寻找二叉搜索树中序前驱的方法存在什么问题?
中序前驱查找代码及思路
void inorderPredecessor(Node* root, Node* &pre,int key){ if(root == NULL ) return ; if(root -> data == key){ inorderPredecessor(root ->left , pre , key); }else if(root -> data > key){ inorderPredecessor(root -> left ,pre ,key); }else{ if(pre == NULL) pre = root; else if(pre -> data > root -> data) pre = root; inorderPredecessor(root -> right , pre ,key); } }
思路说明
- 若当前节点等于目标节点,递归遍历其左子树——左子树节点值均小于目标节点,前驱应存在于此。
- 若当前节点值大于目标节点,递归遍历其左子树,继续定位目标节点。
- 若当前节点值小于目标节点,检查
pre变量:- 若
pre为空,将当前节点赋值给pre - 若
pre不为空,保留值更小的节点 - 完成判断后递归遍历当前节点的右子树
- 若
我已经多次进行干运行,但仍未找到代码中的错误。
内容的提问来源于stack exchange,提问作者abhinav550
相关产品推荐
相关产品推荐

