题目描述:
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 4
思路:
方法一:先中序遍历,然后再输出第k大的数
方法二:边中序遍历,边比较是否是第K大的数
代码如下:
C++:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int res=0,count=0;
void dfs(TreeNode* root,int k){
if(root->right!=NULL) dfs(root->right,k);
if(++count==k){
res=root->val;
return;
}
if(root->left!=NULL) dfs(root->left,k);
}
int kthLargest(TreeNode* root, int k) {
dfs(root,k);
return res;
}
};
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
self.res=0
self.count=0
self.dfs(root,k)
return self.res
def dfs(self,root,k):
if root==None or self.count==k:
return
self.dfs(root.right,k)
self.count+=1
if self.count==k:
self.res=root.val
self.dfs(root.left,k)