zoukankan      html  css  js  c++  java
  • Leetcode230题二叉搜索树中第k小的数

    题目

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

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

    示例

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

    题解

    参考Cyc大佬博客实现

    本题可以分别利用中序遍历法和递归法进行求解。中序遍历法需要利用变量来记录好中间状态。

    中序遍历法:

    class Solution {
        private int value = 0;
        private int cnt = 0;
        public int kthSmallest(TreeNode root, int k) {
            inOrder(root, k);
            return value;
        }
        
        private void inOrder(TreeNode root, int k){
            if(root == null){
                return ;
            }
            inOrder(root.left, k);
            cnt++;
            if(cnt == k){
                value = root.val;
                return ;
            }
            inOrder(root.right, k);
        }
    }

    递归法

    class Solution {
        /*
        查找左子树节点个数N,当N+1==k时,则返回查找节点;
        如果N+1 > k,则继续在左子树中查找,k值不变
        否则的话在右子树中查找,此时k应减去原左子树节点个数与根节点之和,即为k-N-1
        */
        public int kthSmallest(TreeNode root, int k) {   
            int N = totalChild(root.left);
            if(N == k - 1){
                return root.val;
            }
            if(N < k - 1){
                return kthSmallest(root.right, k - N - 1);
            }
            return kthSmallest(root.left, k);
        }
        
        private int totalChild(TreeNode root){
            if(root == null){
                return 0;
            }
            return totalChild(root.left) + totalChild(root.right) + 1;
        }
    }
  • 相关阅读:
    Appium运行时,error: Logcat capture failed: spawn ENOENT的解决办法
    pwntools使用简介3
    pwntools使用简介2
    pwnable.kr memcpy之write up
    pwnable.kr uaf之wp
    【笔记】objdump命令的使用
    pwnable.kr cmd2之write up
    pwnable.kr cmd1之write up
    pwnable.kr lotto之write up
    pwnable.kr blackjack之write up
  • 原文地址:https://www.cnblogs.com/jianglinliu/p/11802445.html
Copyright © 2011-2022 走看看