530.二叉搜索树的最小绝对差
题目链接:力扣题目链接
思路:因为是搜索二叉树,中序遍历加入列表就是一个递增的列表,然后列表前后对比即可。或者设定成员变量min和preNode记录前一个nide值,中序遍历当前中节点与preNode对比即可。
class Solution {
Integer min = Integer.MAX_VALUE; // 最小差值的初始化
Integer last = null; // 用于记录上一个节点的值
public int getMinimumDifference(TreeNode root) {
inOrderTraversal(root); // 中序遍历二叉树
return min;
}
public void inOrderTraversal(TreeNode node) {
if (node == null) return;
// 递归遍历左子树
if (node.left != null) {
inOrderTraversal(node.left);
}
// 计算当前节点和上一个节点之间的差值
if (last != null) {
min = Math.min(min, node.val - last);
}
last = node.val; // 更新上一个节点的值为当前节点值
// 递归遍历右子树
if (node.right != null) {
inOrderTraversal(node.right);
}
}
}
501.二叉搜索树中的众数
题目链接:
力扣题目链接
思路:和“530.二叉搜索树的最小绝对差”类似,做一个去成员变量list存储最后结果、maxCount最大次数、count当前次数,进行统计即可。
236. 二叉树的最近公共祖先
题目链接:力扣题目链接
思路:直接查看题解,因为是要找公共节点应该是从下往上找,自下而上应该用后续遍历。其实有一种可能需要考虑,是两个需要找的节点是父节点和子节点关系。以下方法很巧妙,参考“代码随想录”
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
return die(root,p,q);
}
public TreeNode die(TreeNode node, TreeNode p, TreeNode q){
if(node == null){
return null;
}
if(node ==p||node==q){
return node;
}
TreeNode left = die(node.left, p, q);
TreeNode right = die(node.right, p, q);
if(left!=null&&right!=null){
return node;
}else if(left!=null&&right==null){
return left;
}else if(left==null&&right!=null){
return right;
}else{
return null;
}
}
}