我的解题:
用stack实现中序遍历,将二叉树从小到大的顺序保存在vector中
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
stack<TreeNode*> s;
vector<TreeNode*> v;
int count=0;
TreeNode* tmp=root;
while(tmp||!s.empty()){
while(tmp){
s.push(tmp);
tmp=tmp->left;
}
tmp=s.top();
s.pop();
v.push_back(tmp);
tmp=tmp->right;
}
int n= v.size();
if(k>n) return 0;
return v[n-k]->val;
}
};
2。递归实现中序遍历
class Solution {
public:
vector<TreeNode*> v;
void inorder(TreeNode* root){
if(root){
inorder(root->left);
v.push_back(root);
inorder(root->right);
}
}
int kthLargest(TreeNode* root, int k) {
inorder(root);
if(k>v.size()) return 0;
return v[v.size()-k]->val;
}
};