530. 二叉搜索树的最小绝对差 - 力扣(LeetCode)
class Solution {
private int minDiff = Integer.MAX_VALUE;
TreeNode pre;
public int getMinimumDifference(TreeNode root) {
inOrderTraversal(root);
return minDiff;
}
private void inOrderTraversal(TreeNode node) {
if (node == null) {
return;
}
inOrderTraversal(node.left);
if (pre != null) {
minDiff = Math.min(minDiff, node.val - pre.val);
}
pre = node;
inOrderTraversal(node.right);
}
}
这题得注意前一个节点值的问题。
501. 二叉搜索树中的众数 - 力扣(LeetCode)
class Solution {
List<Integer> modes = new ArrayList<>();
private int maxCount;
private int currentCount;
private int currentVal;
public int[] findMode(TreeNode root) {
inorderTraversal(root);
int[] res = new int[modes.size()];
for (int i = 0; i < modes.size(); i++) {
res[i] = modes.get(i);
}
return res;
}
private void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
inorderTraversal(root.left);
if (currentVal == root.val) {
currentCount++;
} else {
currentVal = root.val;
currentCount = 1;
}
if (currentCount > maxCount) {
maxCount = currentCount;
modes.clear();
modes.add(currentVal);
} else if (currentCount == maxCount) {
modes.add(currentVal);
currentCount = 1;
}
inorderTraversal(root.right);
}
}
236. 二叉树的最近公共祖先 - 力扣(LeetCode)
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null || root == p || root ==q){
return root;
}
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left != null && right != null){
return root;
}
return left != null ? left:right;
}
}