面试题54:二叉搜索树的第k大节点

统计一个数字在升序数组中出现的次数。

解题思路

  • 中序遍历递归查找到第k个
  • 还可以通过非递归的中序遍历法找到第k个

上代码(C++很香)

法一:递归中序遍历
TreeNode* ans = nullptr;
int countK = 0;

// 中序遍历
void middleDFS(TreeNode* pRoot, int k){
    if(pRoot == nullptr)
        return ;

    middleDFS(pRoot->left, k);
    if(++countK == k){
        ans = pRoot;
        return ;
    }
    middleDFS(pRoot->right, k);
}

TreeNode* KthNode(TreeNode* pRoot, int k){

    if(pRoot == nullptr || k == 0)
        return nullptr;
    middleDFS(pRoot, k);
    return ans;
}
posted @ 2020-08-23 18:41  程序员曾奈斯  阅读(98)  评论(0)    收藏  举报