題目
給定一棵二叉搜索樹,請找出其中第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
限制:
1 ≤ k ≤ 二叉搜索樹元素個數
方案:遞歸
- 採用想減法,從最右值開始找起,到k–到1那個數,就是第k大的
class Solution {
int tmpk;
int val=-1;
public int kthLargest(TreeNode root, int k) {
tmpk = k;
findnode(root);
return val;
}
public void findnode(TreeNode node){
if(node.right!=null) findnode(node.right);
if(tmpk==1&&val==-1) {val=node.val;return;}
if(tmpk>1) {
tmpk--;
if(node.left!=null) findnode(node.left);
}
}
}
複雜度計算