LeetCode-二叉搜索树的第k大节点

二叉搜索树的第k大节点

LeetCode-面试题54

  • 需要充分了解二叉搜索树的性质.
  • 利用中序遍历的思想,采用相反的思想:先遍历右节点再遍历左节点。
/**
 * 给定一棵二叉搜索树,请找出其中第k大的节点。
 **/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/**
输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 4
**/
class Solution {
private:
    int n=0;
    int result=0;
public:
    void DFS(TreeNode* node,int k){
        if(node->right)
            DFS(node->right,k);
        n++;
        if(n==k)
            result=node->val;
        if(node->left)
            DFS(node->left,k);
    }
    int kthLargest(TreeNode* root, int k) {
        if(root)
            DFS(root,0);
        return result;
    }
};
int main(){
    TreeNode* t1=new TreeNode(5);
    TreeNode* t2=new TreeNode(3);
    TreeNode* t3=new TreeNode(6);
    TreeNode* t4=new TreeNode(2);
    TreeNode* t5=new TreeNode(4);
    TreeNode* t6=new TreeNode(1);
    t4->left=t6;
    t2->left=t4;t2->right=t5;
    t1->left=t2;t1->right=t3;
    Solution solution;
    cout<<solution.kthLargest(t1,3)<<endl;
    system("pause");
    return 0;
}
posted @   Garrett_Wale  阅读(328)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示