精品推荐:
《征服数据结构》专栏:50多种数据结构彻底征服
《经典图论算法》专栏:50多种经典图论算法全部掌握
真是有心栽花花不开,无心插柳柳成荫,最近一网友在面试的时候,想去的公司都没有收到offer,反而是最不想去的字节给了口头offer。
不管怎么说字节也算是大厂中的大厂,有些人想去不一定能进的去,就像网友说的:旱的旱死,涝的涝死。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第230题:二叉搜索树中第 K 小的元素。
问题描述
来源:LeetCode第230题
难度:中等
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。
示例1:
输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3
树中的节点数为 n 。
1 <= k <= n <= 10^4
0 <= Node.val <= 10^4
问题分析
这题说的是找出二叉搜索树第 k 小的元素,我们知道二叉搜索树中序遍历的 结果是有序的,我们只需要按照二叉搜索树中序遍历的方式来统计节点的个数,第 k 个就是我们要查找的值。
JAVA:
int ans = -1;
int count;
public int kthSmallest(TreeNode root, int k) {
count = k;
inOrder(root);
return ans;
}
// 二叉树的中序遍历
private void inOrder(TreeNode node) {
if (node == null)
return;
inOrder(node.left);// 访问左子节点
//访问当前节点,如果访问到第k个就把ans赋值
if (--count == 0) {
ans = node.val;
return;
}
inOrder(node.right);// 访问右子节点
}
C++:
public:
int ans = -1;
int count;
int kthSmallest(TreeNode *root, int k) {
count = k;
inOrder(root);
return ans;
}
void inOrder(TreeNode *node) {
if (node == nullptr)
return;
inOrder(node->left);// 访问左子节点
// 访问当前节点,如果访问到第k个就把ans赋值
if (--count == 0) {
ans = node->val;
return;
}
inOrder(node->right);// 访问右子节点
}
Python:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
self.ans = -1
self.count = k
self.inOrder(root)
return self.ans
def inOrder(self, node: TreeNode): # 二叉树的中序遍历
if node is None:
return
self.inOrder(node.left) # 访问左子节点
# 访问当前节点,如果访问到第k个就把ans赋值
self.count -= 1 # 访问当前节点
if self.count == 0:
self.ans = node.val
return
self.inOrder(node.right) # 访问右子节点
笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。
数组,稀疏表(Sparse Table),单向链表,双向链表,块状链表,跳表,队列和循环队列,双端队列,单调队列,栈,单调栈,双端栈,散列表,堆,字典树(Trie树),ArrayMap,SparseArray,二叉树,二叉搜索树(BST),笛卡尔树,AVL树,树堆(Treap),FHQ-Treap,哈夫曼树,滚动数组,差分数组,LRU缓存,LFU缓存
……
图的介绍,图的表示方式,邻接矩阵转换,广度优先搜索(BFS),深度优先搜索(DFS),A*搜索算法,迭代深化深度优先搜索(IDDFS),IDA*算法,双向广度优先搜索,迪杰斯特拉算法(Dijkstra),贝尔曼-福特算法(Bellman-Ford),SPFA算法,弗洛伊德算法(Floyd),卡恩(Kahn)算法,基于DFS的拓扑排序,约翰逊算法(Johnson)
……