62.二叉搜索树的第k个结点

题目描述

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


思路:

采用先序遍历,引入参数k和res,前者用来记录取到还剩几个数,后者用来保存最后的结点。


代码:

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    TreeNode* KthNode(TreeNode* pRoot, int k) {
        if(pRoot == NULL) return NULL;
        TreeNode* res = NULL;
        KthNodeCore(pRoot, k, res);
        return res;
    }
    void KthNodeCore(TreeNode* p, int &k, TreeNode* &T) {
        if(k > 0 && p->left != NULL) {
            KthNodeCore(p->left, k, T);
        }
        if(k == 1) {
            T = p;
        }
        --k;
        if(k > 0 && p->right != NULL) {
            KthNodeCore(p->right, k, T);
        }
    }
    
};

猜你喜欢

转载自blog.csdn.net/nichchen/article/details/80611055