zoukankan      html  css  js  c++  java
  • 【C++、二叉搜索树】LeetCode230. 二叉搜索树中第K小的元素

    1. 二叉搜索树中第K小的元素

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

    说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

    示例 1:

    输入: root = [3,1,4,null,2], k = 1
       3
      / 
     1   4
      
       2
    输出: 1
    

    示例 2:

    输入: root = [5,3,6,2,4,null,null,1], k = 3
           5
          / 
         3   6
        / 
       2   4
      /
     1
    输出: 3
    

    进阶:

    如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

    /**
     * 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 dfs(TreeNode* root,int& res, bool& find, int& i, int k) {//对于想修改的值,引用
            if (root == NULL || find) return;//树是空的,或者已经找到目标,停止递归
            dfs(root->left, res, find, i, k);//递归调用,针对左子树
            if (++i == k) {//找到第k个小的数,记录结果并返回
                res = root->val;
                find = true;
                return;
            }
            dfs(root->right, res, find, i, k);//递归调用,针对右子树
        }
        int kthSmallest(TreeNode* root, int k) {
            bool find = false;//是否成功找到
            int res = -1;//记录结果值
            int i = 0;
            dfs(root, res, find, i, k);
            return res;//返回结果
        }
    };
    
  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 1328 Radar Installation
    bzoj 4010: [HNOI2015]菜肴制作
    bzoj 4008: [HNOI2015]亚瑟王
    UVA 1451 Average
    UVA 1481 Genome Evolution
    HDU 1542 Atlantis
    UVA 11419 SAM I AM
    UVA 11762 Race to 1
    P2209 [USACO13OPEN]燃油经济性Fuel Economy
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059114.html
Copyright © 2011-2022 走看看