当前位置:网站首页>LeetCode——二叉搜索树的第k大节点(借助中序遍历)

LeetCode——二叉搜索树的第k大节点(借助中序遍历)

2022-06-22 04:41:00 Always--Learning

题目描述

image.png

解题思路

这个题目我们首先要知道什么是二叉搜索树,二叉搜索树的特点是一个节点的左子节点比该节点小,右子节点比该节点大。

那么二叉搜索树的中序遍历有什么特点?

二叉搜索树: [3,1,4,null,2]
中序遍历结果:[1,2,3,4] 第1大的元素是res.length - 1(k):下标为3

二叉搜索树:[5,3,6,2,4,null,null,1]
中序遍历结果:[1,2,3,4,5,6] 第3大的元素是res.length - 3(k):下标为4

从上面的例子中我们可以看出,要想求一颗二叉搜索树的第K大节点,可以对一颗二叉搜索树进行中序遍历,然后将遍历结果数组的长度减去K就是第K大节点对应的下标。

  1. 如果传入节点为空,则返回null。
if (!root) return null;
  1. 定义结果数组
const res = [];
  1. 进行中序遍历
const midOrder = (root) => {
    
    if (!root) return null;
    midOrder(root.left);
    res.push(root.val);
    midOrder(root.right);
    }
midOrder(root);
  1. 返回二叉搜索树第K大节点对应的下标
return res[res.length - k];

AC代码

var kthLargest = function(root, k) {
    
    if (!root) return null;
    const res = [];
    const midOrder = (root) => {
    
    if (!root) return null;
    midOrder(root.left);
    res.push(root.val);
    midOrder(root.right);
    }
    midOrder(root);
    return res[res.length - k];
};

反思

二叉搜索树的第K大节点是一个很好的题目,我原本想的是直接对二叉搜索树进行遍历,然后进行排序,然后返回第K大的节点,但是这样做显然是没有利用二叉搜索树的特点,尤其是没有利用二叉搜索树进行中序遍历的特点,只要知道了二叉搜索树的中序遍历的特点,便可迎刃而解。

原网站

版权声明
本文为[Always--Learning]所创,转载请带上原文链接,感谢
https://jiapy.blog.csdn.net/article/details/125367441