从大到小输出二叉搜索树中键值不小于K的关键字
来源:互联网 发布:snh48是什么玩意知乎 编辑:程序博客网 时间:2024/06/05 20:03
概要
这是王道数据结构复习资料上的一道题。该书给出了递归算法,但是解析中对于非递归算法说使用非递归中序遍历的思路进行解答,这明显有错误。根据 二叉搜索树的性质可知,二叉搜索树的中序遍历是从小到大的序列,但是题意却是要从大到小输出,故需要采用右根左的遍历方式才能得到题意所要求的序列。
算法如下:
void FindK(BinarySearchTree* BST , int k){ stack<BinarySearchTree*> stack; //初始化栈 BinarySearchTree* binary_tree_curr = BST; //保存当前结点 while(binary_tree_curr || !stack.empty()){ if(binary_tree_curr->rchild){ //右孩子非空 stack.push(binary_tree_curr); //当前结点入栈 binary_tree_curr = binary_tree_curr->rchild; //遍历右子树 }else{ //右孩子为空,则打印当前结点遍历左子树 if(binary_tree_curr->data >= k){ cout<<binary_tree_curr->data<<" "; } binary_tree_curr = binary_tree_curr->lchild; //如果为空,且栈不空,则将栈顶节点出栈,并输出该节点, //同时将它的左孩子设为当前节点,继续判断,直到当前节点不为空 while(!binary_tree_curr && !stack.empty()){ binary_tree_curr = stack.top(); if(binary_tree_curr->data >= k){ cout<<binary_tree_curr->data<<" "; } stack.pop(); binary_tree_curr = binary_tree_curr->lchild; } } }}
截图如下:
对于二叉排序树的完整代码如下请移步我的另外一篇博客:
http://blog.csdn.net/qq_30091945/article/details/77720865
对于二叉树的递归遍历与非递归遍历请移步:
http://blog.csdn.net/qq_30091945/article/details/77531651
阅读全文
0 0
- 从大到小输出二叉搜索树中键值不小于K的关键字
- 输出所有不小于N的素数(一)
- 输出所有不小于N的素数(二)
- 从一组数中找到第二大的数/从一组数中找到不小于第二大数的数字的个数
- hdu 3415 后缀数组 长度不小于 k 的公共子串的个数
- POJ 3415 求两个字符串间长度不小于k的公共子串的个数
- HUST 1352 求重复次数不小于k的子串的个数。
- poj 3415 ( 后缀数组 长度不小于 k 的公共子串的个数)
- 后缀数组(长度不小于k的公共子串的个数)
- POJ 3415 不小于k的公共子串的个数
- 后缀数组(长度不小于k的公共子串的个数)
- 长度不小于 k 的公共子串的个数(poj3415)
- poj3415之长度不小于k的公共子串个数
- 线段树求某值之前或之后与其差值不小于k的最近位置
- (Relax 后缀数组1.3)POJ 3415 Common Substrings(求串A和串B中长度不小于k的公共子串数)
- 一个应用二叉搜索树实现的字典,并存储结构于文件中
- 【二叉树】二叉搜索树的第k个结点
- 正则表达式提取Url中QueryString键值(搜索关键字的提取)
- 深入理解Java虚拟机(第二章):Java内存区域与内存溢出异常
- Java_基础—多线程之间的通信以及JDK1.5新特性互斥锁
- git基本命令
- 初识static静态
- 真正的软件测试实习一
- 从大到小输出二叉搜索树中键值不小于K的关键字
- ARM汇编程序-逻辑控制
- HDU 6140 Hybrid Crystals(坑题+水题)
- 《ThinkPHP5.0+小程序商城构建全栈应用》视频教程下载
- Hyperledger Fabric译文之Membership Service Providers (MSP)
- 硬件系统工程师宝典-目录
- android 按下返回键 一段时间内两次点击结束程序
- HDOJ HDU 1010 Tempter of the Bone
- MVP的实现,后续更新mvp和databinding结合