如何用C++递归来查找BST中的根节点的inorder successor
2017-08-15 16:13
295 查看
小编觉得大家看到这个题目应该有点懵圈,我猜想大概是不知道什么是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文件
下面是table.cpp的代码展示,也就是如何实现这两个函数
下面就是展示在主函数里,如何调用这两个函数了
下面就是结果的展示了:
有可能大家有些看不懂这个结果,没事,小编会为大家解释的。
结果中的Level 1就是根节点,根据BST的规则,就可以知道这棵树是什么样子的了。然后输出的结果就是13了。
以后小编还会继续用C++来实现有关数据结构中的问题,敬请期待吧!
比如,一棵二叉搜索树的中序遍历的结果是: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++来实现有关数据结构中的问题,敬请期待吧!
相关文章推荐
- [leetcode 285] Inorder Successor in BST---查找二叉搜索树中某个节点在中序遍历中的后续节点
- Tree_Graph Inorder Successor in Binary Search Tree BST中找中序遍历的后继节点 @CareerCup
- Inorder Successor in Binary Search Tree BST中找中序遍历的后继节点
- 如何用C++递归在BST(Binary Search Tree) 数有几个节点大于根节点的数字
- [LeetCode] Inorder Successor in BST 二叉搜索树中的中序后继节点
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- Inorder Successor in BST
- Inorder Successor in BST
- 285. Inorder Successor in BST
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 285. Inorder Successor in BST
- 285. Inorder Successor in BST
- [leetcode]Inorder Successor in BST
- 285. Inorder Successor in BST
- [刷题]Inorder Successor in BST
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- [Lintcode] Inorder Successor in BST
- [LeetCode] Inorder Successor in BST
- [Locked] Inorder Successor in BST