从大到小输出二叉搜索树中键值不小于K的关键字

原创 2017年09月03日 10:44:50

概要

这是王道数据结构复习资料上的一道题。该书给出了递归算法,但是解析中对于非递归算法说使用非递归中序遍历的思路进行解答,这明显有错误。根据 二叉搜索树的性质可知,二叉搜索树的中序遍历是从小到大的序列,但是题意却是要从大到小输出,故需要采用右根左的遍历方式才能得到题意所要求的序列。


算法如下:

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

版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945

相关文章推荐

散列表(下)——分离链接法

概述在我的上一篇博客散列表(上)——开放定址法 主要讲述了开放定址法的三种思路:线性探测法,平法探测法,双散列法三种思路,以及线性探测的代码实现。在这篇博客里,主要讲解第二中解决冲突的办法——分离链接...

Cocos2d-x 3.x部署

这是我第一次写技术文章,这里只是分享一下我的部署经验,请各位参考,如果有部署问题也欢迎提问,我尽量回答,谢谢。     这里我简单的写写我的部署步骤,其中的一个步骤是我今天重新打开电脑后才完成的,就是...

二叉搜索树中找出比K大的最小的那个数

这是一道面试的算法题,题目不难,但是在面试的时候是要求直接在白板上写程序,感觉自己还是弱爆了。第一次体验这种面试方式,虽然被虐,但是感觉还是挺好的,这方面的经验还是需要积累。题目: 在一个二叉搜索树种...

Kth Smallest Element in a BST 找二叉搜索树中的第k小的元素

一个容易想到的想法是基于二叉树,只要对二叉树进行中序遍历,序列中第k个元素就是想要找的第k小的元素。 在这里,我还会介绍另一解法。基于binar search的,这个方法的效率更高。 解法1:中序遍历...

剑指offer 面试题63:二叉搜索树的第k个结点(二叉树中序遍历的应用) 题解

面试题 63:二叉搜索树的第k个结点 题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 (见下面的图1) 中,按结点数值大小顺序第三个结...

【HDU5806 BestCoder Round 86C】【双指针】多少个区间内第k大数不小于m

NanoApe Loves Sequence Ⅱ    Accepts: 374    Submissions: 946  Time Limit: 4000/2000 MS (Java/...

找出二叉树中最大的子树,且子树为二叉搜索树

题目 找出二叉树中最大的子树,该子树为二叉搜索树。所谓最大的子树就是指结点数目最多的子树。 分析 该题目是要找出二叉树中最大的子树,该子树必须是二叉搜索树(BST)。子树的概念需要重点关...

C#中键值对类型Hashtable与Dictionary比较和相关用法

最近在使用C#中的Hashtable与Dictionary的时候,想知道其区别,通过查找网络相关博客资料,作出下列总结。 Hashtable与Dictionary虽然都是作为键值对的载体,但是采用的...

容器 泛型 Map中键值对最简单形式 ,记录输入aaa bbb ccc的个数最简形式

对比左右

【Objective-C】OC中键值编码(KVC)的概念和使用方法

键值编码的基本概念       1:键值编码是一个用于简介访问对象属性的机制,使用该机制不需要调用存取方法和变量实例 就可以访问对象属性。       2:键值编码方法在Object...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从大到小输出二叉搜索树中键值不小于K的关键字
举报原因:
原因补充:

(最多只允许输入30个字)