剑指offer(59)-二叉搜索树的第k个结点

来源:互联网 发布:网络大电影拍摄团队 编辑:程序博客网 时间:2024/06/05 15:50

题目描述


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

解题思路


如果按照中序遍历的顺序遍历一颗二叉搜索树,遍历序列的数值是递增排序的。因此,只需要用中序遍历算法遍历一颗二叉搜索树,就很容易找出它的第k大结点。

代码


/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {  int count = 0;public:    TreeNode* KthNode(TreeNode* pRoot, unsigned int k)    {        if(pRoot){                 TreeNode *ret = KthNode(pRoot->left, k);                if(ret) return ret;                if(++count == k) return pRoot;                ret = KthNode(pRoot->right,k);                if(ret) return ret;        }        return nullptr;    }};
0 0
原创粉丝点击