[LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)

时间:2022-06-17 20:40:11

题目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);
}

}

``