zoukankan      html  css  js  c++  java
  • Easy | 剑指 Offer 54. 二叉搜索树的第k大节点

    剑指 Offer 54. 二叉搜索树的第k大节点

    给定一棵二叉搜索树,请找出其中第k大的节点。

    示例 1:

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

    示例 2:

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

    限制:

    1 ≤ k ≤ 二叉搜索树元素个数

    解题思路

    使用递归的中序遍历二叉树, 在遍历的同时进行计数, 当计数值小于K时, 继续遍历, 等于K时, 返回当前节点值, 大于K时, 直接返回值。

    class Solution {
    
        private int curSeq = 0;
        int res = 0;
    
        public int kthLargest(TreeNode root, int k) {
            if (root == null) {
                return 0;
            }
            // 先遍历右子树
            kthLargest(root.right, k);
            // 然后遍历当前节点, 并且计数器自增
            curSeq++;
            if (curSeq == k) {
                // 计数器为K, 说明当前是RNL遍历的第K个节点 全局变量保存当前的结果
                res = root.val;
            } else if (curSeq < k) {
                // 如果当前节点还是小于K, 则继续递归遍历左子树
                kthLargest(root.left, k);
            }
            // 返回结果, 若遍历完左子树之后还是小于K, 当前的结果还不是最终的结果
            return res;
        }
    }
    
  • 相关阅读:
    Python之内置函数再总结
    内置函数
    函数递归
    字符编码之文件处理
    文件处理
    python1数据链接总结
    知识点练习day9
    第一周作业
    python1
    网络基础预习
  • 原文地址:https://www.cnblogs.com/chenrj97/p/14290684.html
Copyright © 2011-2022 走看看