• LeetCode 面试题54. 二叉搜索树的第k大节点


    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 面试题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 ≤ 二叉搜索树元素个数

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    思路1-中序遍历记录排序序号返回

    二叉搜索树的中序遍历结果是有序序列:

    • 左根右的中序遍历获得的是递增序列;
    • 右根左的中序遍历获得的是递减序列;

    所以,可以对二叉搜索树进行右根左的中序遍历并记录遍历的序号,返回遍历到的第k个节点值即可;

    算法复杂度:

    • 时间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(1 ight)}} $

    算法源码示例

    package leetcode;
    
    /**
     * @author ZhouJie
     * @date 2020年5月17日 上午1:15:08 
     * @Description: 面试题54. 二叉搜索树的第k大节点
     *
     */
    public class LeetCode_Offer_54 {
    
    }
    
    //  Definition for a binary tree node.
    class TreeNode_Offer_54 {
    	int val;
    	TreeNode_Offer_54 left;
    	TreeNode_Offer_54 right;
    
    	TreeNode_Offer_54(int x) {
    		val = x;
    	}
    }
    
    class Solution_Offer_54 {
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年5月17日 上午1:16:10 
    	 * @param: @param root
    	 * @param: @param k
    	 * @param: @return
    	 * @return: int
    	 * @Description: 1-中序遍历,左根右为递增可求第k小,右根左为递减可求第k大;
    	 *
    	 */
    	// count记录排序序号
    	int rst = 0, count = 0;
    
    	public int kthLargest_1(TreeNode_Offer_54 root, int k) {
    		dfs(root, k);
    		return rst;
    	}
    
    	private void dfs(TreeNode_Offer_54 root, int k) {
    		if (root == null) {
    			return;
    		} else {
    			dfs(root.right, k);
    			// count为k时即找到了第k大的数
    			if (++count == k) {
    				rst = root.val;
    				return;
    			}
    			dfs(root.left, k);
    		}
    	}
    }
    
  • 相关阅读:
    BZOJ1941Hide and Seek
    数学与树学(娱乐向)
    树状数组(模板)
    BZOJ2716天使玩偶
    BZOJ3262陌上花开
    BZOJ3781小B的询问
    BZOJ3236作业
    Bsgs模板
    HNOI2008明明的烦恼
    BZOJ1211树的计数
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12916362.html
Copyright © 2020-2023  润新知