从大到小输出二叉搜索树中键值不小于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
原创粉丝点击