《从头再来》剑指offer.54 二叉搜索树的第k大节点

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

我们需要明确一点,二叉搜索树的中序遍历即使一个从小到大的序列,所以找出的k大节点的话,我们可以直接对二叉搜索树进行中序遍历后,再来输出第k大即可。

/**
 * 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:
    //中序遍历
    void traverse(TreeNode* root){
        if(root == nullptr) return;

        traverse(root->left);
        result.push_back(root->val);
        traverse(root->right);
    }
    vector<int> result;
    int kthLargest(TreeNode* root, int k) {
        traverse(root);
        return result[result.size()-k];
    }
};

中序遍历的模板就没什么好说的,如果是先序遍历、后续遍历的话,只需要改变三条代码的次序即可。

《从头再来》

posted @ 2021-06-07 21:27  丶原来是枝知啊i  阅读(50)  评论(0)    收藏  举报