每日力扣-树-输出第k大的值

91 阅读1分钟

给定一棵二叉搜索树,请找出其中第k大的节点。

输入: root = [3,1,4,null,2], k = 1 3 /
1 4
2 输出: 4

解题思路:二叉搜索树的中序遍历(右中左)就是升序,那左中右就是降序,然后输出第k-1个数就行了

/**
 * 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:
    vector<int> vec;
    int kthLargest(TreeNode* root, int k) {
        dfs(root,vec);
        return vec[k - 1];
    }
    void dfs(TreeNode* root,vector<int> &vec)
    {
        if(root == nullptr) return;
        dfs(root->right,vec);
        vec.push_back(root->val);
        dfs(root->left,vec);
    }
};