二叉搜索树中第k小的元素
leetcode第230题(中等)
原链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/submissions/
问题描述
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
个最小元素(从 1 开始计数)。
示例1
输入:root = [3,1,4,null,2], k = 1
输出:1
示例2
输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3
解题思路
递归中序遍历二叉搜索树,因为这种遍历方式是有序的,且顺序是从大到小。当遍历到第k个元素时返回当前节点的val值就可以了。
代码(java)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int kthSmallest(TreeNode root, int k) {
this.k=k;
dfs(root);
return val;
}
int k;
int i=1;
int val;
boolean b=false;
public void dfs(TreeNode root){
if(b||root==null){
return;
}
dfs(root.left);
if(!b&&i==k){
val=root.val;
b=true;
return;
}
i++;
dfs(root.right);
}
}
测试结果
猜你喜欢
ofc
二叉树中的列表
official
1365
叉树和一个head为第一个节点的链表。如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以head为首的链表中每个节点的值,那么请你返回True,否则返回False。一直向下的路径的意思
weblog
6156
什么是二叉树的前驱节点和后继节点?某节点的前驱节点的val值小于该节点的val值并且值是最大的那个节点。某节点的后继节点的val值大于该节点的val值并且值是最小的那个节点。下面给出一个二叉树节点类
ofc
二叉树的所有路径
official
1228
径。说明:叶子节点是指没有子节点的节点。示例:输入:1/\23\5输出:["1-2-5","1-3"]解释:所有根节点到叶子节点的路径为:1-2-5,1-3解题思路递归得方式遍历二叉树(深度优先搜索),
ofc
平衡二叉树
official
1162
leetcode第110题(简单)原链接https://leetcode-cn.com/problems/balanced-binary-tree/题目描述给定一个二叉树,判断它是否是高度平衡的二叉
blog
算法-没有bug的二分查找
数据结构与算法
7490
科普:第一篇二分搜索论文是1946年发表,然而第一个没有bug的二分查找法却是在1962年才出现,中间用了16年的时间。定义在计算机科学中,二分查找(英语:binarysearch),也称折半搜索
数据结构与算法
7666
题目:判断下方两棵二叉树右方的二叉树是否为左方二叉树的子树例1:||/-----------10(10)------\/-------10(10)------\||||/-------5(5
ofc
N叉树的前序遍历
official
1060
leetcode第589题题目描述给定一个N叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历:[1,3,5,6,2,4]。解题思路递归遍历,深度优先搜索代码(java
blog
二叉树的遍历-(递归法)和(非递归法)
数据结构与算法
5309
整理二叉树的遍历-(递归法)和(非递归法)-笔记先序遍历、中序遍历、后续遍历、层级遍历。1.节点信息:packagetree;publicclassNodeE{ privateEe;//数据域
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。