题解 | #c++ 遇事不决哈希表,二次排序#

二叉搜索树的第k个结点

http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
map<TreeNode*,int> result;
/* 对哈希表按照value 排序方式1 外部排序函数 
bool cmp_by_value( pair<TreeNode*,int> x,pair<TreeNode*,int> y){
            return x.second<y.second;};
*/
class Solution {
public:
    void dfsserch(TreeNode* node, void anyfunction(TreeNode* p)){
        if(node==nullptr){
            return;
        }else{
            anyfunction(node);
            dfsserch(node->left, anyfunction);
            dfsserch(node->right, anyfunction);
        }
    }
    static void function(TreeNode* p){
        result.insert({p,p->val});
    }
    TreeNode* KthNode(TreeNode* pRoot, int k) {
        
        if(k == 0 || pRoot == nullptr){
            return nullptr;
        }//方式2 : 降序排序
        auto cmpmax = [](const pair<TreeNode*, int> x,const pair<TreeNode*,int> y){
            return x.second>y.second;};
        //方式2 : 升序排序
        auto cmpmin = [](const pair<TreeNode*,int> x,const pair<TreeNode*,int> y){
            return x.second<y.second;};
        dfsserch(pRoot, function);
        vector<pair<TreeNode*,int>> results(result.begin(),result.end());
        sort(results.begin(),results.end(),cmpmax);
        for(auto x : results){
            cout << "value : " << x.second<<",";
        }while(--k){
            results.pop_back();
        }
        return results.back().first;
    }

    
};
全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务