LKJZ54-二叉搜索树的第K大节点
DFS-深度优先遍历
二叉搜索树按照中序遍历左中右可以获得升序数字
要找到第K大的节点,所以需要数字降序排列,则按照反向中序比那里右中左遍历即可,遍历的同时找到第K个遍历的值
class Solution {
public:
int i=0;
stack<TreeNode*>st;
//因为使用stack-LIFO-所以遍历的顺序依旧为左中右-实际出栈顺序就为右中左
//又由于二叉搜索树的性质-输出的序列为一个降序序列
//当i==k时root->val即为第K大的值
void Traveltree(TreeNode*root){
if(root==nullptr){
return;
}
Traveltree(root->left);
st.push(root);
Traveltree(root->right);
}
int kthLargest(TreeNode* root, int k) {
Traveltree(root);
while(!st.empty()){
root=st.top();
st.pop();
i++;
if(i==k){
return root->val;
}
}
return 0;
}
};