题目:
分析:
天哪,都想到要使用一个额外的数组,怎么就像不到更优化一点点的方法呢?
第k小的代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int ans;
void f(TreeNode* root, int k,int &n)
{//结点的个数
if(root==NULL) return;
f(root->left,k,n);
if(n==k) return;
n++;
if(n==k) ans=root->val;
if(n==k) return;
f(root->right,k,n);
}
int kthLargest(TreeNode* root, int k) {
int n=0;
f(root,k,n);
return ans;
}
};
右,根,左,才是从大到小:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int ans;
void f(TreeNode* root, int k,int &n)
{//结点的个数
if(root==NULL) return;
f(root->right,k,n);
n++;
if(n==k) ans=root->val;
f(root->left,k,n);
}
int kthLargest(TreeNode* root, int k) {
int n=0;
f(root,k,n);
return ans;
}
};