LeetCode——二叉搜索树的第k大节点(逆中序+count)

题目描述

image.png

题目解读

题目让我们去查找二叉搜索树的第K大的节点,我们首先要搞懂下面几个问题:

  • RQ:二叉搜索树和普通二叉树的区别在哪里?

二叉搜索树的特点是左子节点都比根节点小,右子节点都比根节点大。

解题思路

根据搜索二叉树的特点,我们可以进行一次逆中序遍历,中序遍历我们都知道是左根右的遍历方法,那么逆中序遍历顾名思义是右根左的遍历方法,这样遍历的好处是和二叉搜索树结合起来了,第一个遍历的右子节点就是第1大的元素,因此我们可以通过计数器的方式,一旦计数器到了K,此时的节点就是第K大的节点。

var kthLargest = function(root, k) {
    
    
    // 实现逆中序遍历 + count
    let cur = root;
    const stack = [];
    const res = [];
    let count = 0;
    while (stack.length || cur) {
    
    
        while (cur) {
    
    
            stack.push(cur);
            cur = cur.right;
        }
        let node = stack.pop();
        res.push(node.val);
        count++;
        if (count === k) return node.val;
        if (node.left) {
    
    
            cur = node.left;
        }
    }
};

总结

二叉搜索树这道题目有很多种解法,本次采用的是将逆中序遍历和计数器结合的方法来将第K大的节点找出来,这道题目同时需要我们对二叉搜索树的特点、中序遍历的方法都要有一定的理解才可以。

猜你喜欢

转载自blog.csdn.net/sinat_41696687/article/details/123306478