如何用C++递归来查找BST中的根节点的inorder successor

来源:互联网 发布:卡罗拉双擎销量数据 编辑:程序博客网 时间:2024/06/07 01:14

小编觉得大家看到这个题目应该有点懵圈,我猜想大概是不知道什么是inorder successor吧!那现在小编就为大家排忧解难。这个inorder successor是这么翻译的中序的后继节点。什么意思呢?小编觉得吧,举个例子给大家看看,就应该能明白了。

比如,一棵二叉搜索树的中序遍历的结果是:6,10,11,12,13,13,15,15,17,22,34,72. 而假设根节点是12的话,那么这个根节点的后续节点就是13.这就是为什么叫做inorder successor了,其实就是利用了中序遍历的方法来查找有关inorder successor的。这里补充一点,当心大家有点忘记中序遍历的口诀了,口诀是“左根右”。

小编为大家解决了什么是inorder successor了,那现在咋们就直接进入代码环节:
下面是table.h文件

//This is the table.h file#include<iostream>#include<cstring>#include<cctype>using namespace std;struct node{    int data;    node * left;    node * right;};class table{    public:        //关于如何建立二叉搜索树,小编就不在这里展示代码了        //直接展示有关解决这个问题的函数头        //Find the root's inorder successor and return the item's data to main        int find_root_inorder_successor();    private:        //Find the root's inorder successor and return the item's data to main        int find_root_inorder_successor(node * root);        node * root;};

下面是table.cpp的代码展示,也就是如何实现这两个函数

//This is the table.cpp#include "table.h"int table::find_root_inorder_successor(){    //这里解释一下    //因为根据中序遍历的口诀,那么根节点的后续节点就处在根节点的右子树    //所以就可以直接传root->right给recursive function    return find_root_inorder_successor(root->right);}int table::find_root_inorder_successor(node * root){    if(!root)        return 0;    if(!root->left)        return root->data;    //既然wrapper function已经将参数传到右子树了,那么为了找到根节点的后续节点,那么在递归调用的时候就只遍历左边就行了    return find_root_inorder_successor(root->left);}

下面就是展示在主函数里,如何调用这两个函数了

//This is the main.cpp file#include "table.h"int main(){    //Find the root's inorder successor and return the item's data to main    table object;    int result = object.find_root_inorder_successor();    cout<<"The result is: "<<result<<endl;    return 0;}

下面就是结果的展示了:
这是结果展示

有可能大家有些看不懂这个结果,没事,小编会为大家解释的。
结果中的Level 1就是根节点,根据BST的规则,就可以知道这棵树是什么样子的了。然后输出的结果就是13了。

以后小编还会继续用C++来实现有关数据结构中的问题,敬请期待吧!

原创粉丝点击