当前位置:   article > 正文

在BST树中查找指定 key 的中序遍历的先驱和后续节点_bst中找一个结点的后续结点代码

bst中找一个结点的后续结点代码

问题描述:给定一棵 BST,其根节点指针为 root,节点结构如下:

  1. struct Node
  2. {
  3. int key;
  4. struct Node *left, *right ;
  5. };

现要求在这棵 BST 查找指定 key 的中序遍历的先驱和后续节点,如果不存在,那么请返求 key 应该位于哪两个节点之间。

 

解:下面是解决这个问题的算法描述

  1. Input: root node, key
  2. output: predecessor node, successor node
  3. 1. If root is NULL
  4. then return
  5. 2. if key is found then
  6. a. If its left subtree is not null
  7. 前驱是这个左孩子本身,或者是左子树上最右边的孩子节点(如果存在)
  8. b. If its right subtree is not null
  9. 后续是这个右孩子本身,或者是右子树上最左边的孩子节点(如果存在)
  10. return
  11. 3. If key is smaller then root node
  12. 则把后续节点设置为 root(因为不存在后续,所以这个 root 是后续应在的范围)
  13. 递归在的左子树中搜索
  14. else
  15. 则把前驱节点设置为 root(因为不存在前驱,所以这个 root 是前驱应在的范围)
  16. 递归的在右子树中搜索

C++ 实现

  1. #include <iostream>
  2. using namespa
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/572358
推荐阅读
相关标签
  

闽ICP备14008679号