二叉搜索树的第k大问题之中序遍历的倒序
问题:二叉搜索树的第K大问题面试题54. 二叉搜索树的第 k 大节点(中序遍历 + 提前返回,清晰图解) - 二叉搜索树的第k大节点 - 力扣(LeetCode)
因为二叉搜索树的中序遍历是递增序列,所以中序遍历的倒序为递减序列,则第K大节点的问题转化为此树的中序遍历倒序的第K个节点。
遍历序列:左根右 -> 右根左,采用递归序列,k为0时,即为要找的第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 kthLargest(TreeNode* root, int k) { dfs(root,k); return num; } void dfs(TreeNode* node,int& k){ if(node == nullptr) return; if(node->right) dfs(node->right,k);//先遍历右子节点 if(--k == 0){ num = node->val;//当前根节点; return; } if(node->left) dfs(node->left,k);//遍历左子节点 } private: int num; };