题目230. 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
题解
中序遍历BST,得到有序序列,返回有序序列的k-1号元素。
代码
class Solution {
public int kthSmallest(TreeNode root, int k) {
List<Integer> list = new LinkedList<>();
inorder(root,list);
return list.get(k-1);
}
public void inorder(TreeNode root, List<Integer> list){
if(root == null){return;}
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
题目 530. 二叉搜索树的最小绝对差
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
题解
- 差值的绝对值最小,一定是中序遍历的相邻两节点。
- 参数传pre节点值+中序遍历即可 //代码中之接将pre节点值作为变量更新
代码
``
class Solution {
private int min=Integer.MAX_VALUE;
private int preNodeVal = -1;
public int getMinimumDifference(TreeNode root) {
dfs(root);
return min;
}
public void dfs(TreeNode root){
if(root==null){
return;
}
dfs(root.left);
if(preNodeVal!=-1){
min=Math.min(Math.abs(root.val-preNodeVal),min);
}
preNodeVal=root.val;
dfs(root.right);
}
}
``