【剑指offer-解题系列(63)】二叉搜索树的第k个结点

来源:互联网 发布:php 返回页面 编辑:程序博客网 时间:2024/06/06 08:24

题目描述

给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

分析

二叉搜索树的中序遍历就是一个排序序列,找出来k个数就行了

代码实现

    TreeNode* KthNode(TreeNode* root, int k)
    {
        if(root==NULL)
            return NULL;
        stack<TreeNode*>S;
        TreeNode*p = root;
        int n = 0;
        while(!S.empty()||!(p==NULL)){
            while(p!=NULL){
                S.push(p);
                p=p->left;
            }
            
            if(!S.empty()){
                p=S.top();
                n++;
                if(n==k){
                    return p;
                }
                
                S.pop();
                p=p->right;
            }
        }
        return NULL;
    }

原创粉丝点击