题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。
例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
递归版
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
int cnt = 0;
TreeNode* KthNode(TreeNode* root,int k)
{
if(root)
{
TreeNode* node = KthNode(root->left,k);
if(node)return node; //
cnt++;
if(cnt==k)return root;
node = KthNode(root->right,k);
if(node)return node;
}
return nullptr;
}
};
非递归版
class Solution {
public:
TreeNode* KthNode(TreeNode* root,int k)
{
stack<TreeNode*> S;
int cnt =0;
TreeNode* node =root;
while(node!=nullptr||!S.empty())
{
while(node!=nullptr)
{
S.push(node);
node= node->left;
}
if(!S.empty())
{
node = S.top();
S.pop();
cnt++;
if(cnt==k)return node;
node = node->right;
}
}
return nullptr;
}
};