【剑指Offer】54. 二叉搜索树的第k大节点

剑指 Offer 54. 二叉搜索树的第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:
int res;
    int kthLargest(TreeNode* root, int k) {
        dfs(root,k);
        return res;
    }

    void dfs(TreeNode *root, int &k)
    {

        // 中序遍历 倒序:右节点->根结点->左节点
        if(!root) return ;

        dfs(root->right,k);
        k--;
        if(!k) res = root->val;  // 当k等于0   说明找到目标节点  无需继续遍历
        dfs(root->left,k);// 左
    }

};


版权声明:本文为qq_44653420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。