题目描述:
给定一颗二叉搜索树,请找出其中的第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 {
public:
TreeNode* KthNode(TreeNode* pRoot, int k){
stack<TreeNode*> s;
TreeNode* temp = pRoot;
while (temp || !s.empty()) {
if (temp) {
s.push(temp);
temp = temp->left;
}
else {
temp = s.top();
s.pop();
--k;
if(k == 0)
return temp;
temp = temp->right;
}
}
return NULL;
}
};