题目
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 输出: 4
解题
方法一:中序遍历的倒序遍历
因为中序遍历的正序遍历是从小到大遍历
因为题目要中第K大的数,因此可以用中序遍历的倒序遍历
遍历顺序:右->中->左
class Solution { public: int kthLargest(TreeNode* root, int k) { stack<TreeNode*> st; TreeNode* cur=root; while(!st.empty()||cur){ while(cur){ st.push(cur); cur=cur->right; } cur=st.top(); st.pop(); if(--k==0) return cur->val; cur=cur->left; } return -1; } };