class Solution {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
// 访问左子树
if (!isValidBST(root.left)) {
return false;
}
// 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。
if (root.val <= pre) {
return false;
}
pre = root.val;
// 访问右子树
return isValidBST(root.right);
}
}
给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
class Solution {
int pre;
int ans;
public int getMinimumDifference(TreeNode root) {
ans=Integer.MAX_VALUE;
pre=-1;
dfs(root);
return ans;
}
void dfs(TreeNode root){
if(root==null) return;
dfs(root.left);
if(pre==-1){
pre=root.val;
}else{
ans=Math.min(ans,root.val-pre);
pre=root.val;
}
dfs(root.right);
}
}
class Solution {
int count;
TreeNode pre=null;
int maxCount=Integer.MIN_VALUE;
ArrayList<Integer> res=new ArrayList<>();
public int[] findMode(TreeNode root) {
searchDfs(root);
int[] ans=new int[res.size()];
for(int i=0;i<res.size();i++){
ans[i]=res.get(i);
}
return ans;
}
void searchDfs(TreeNode root){
if(root==null) return;
searchDfs(root.left);
if(pre==null){
count=1;
}else if(pre.val==root.val){
count++;
}else{
count=1;
}
if(count==maxCount) res.add(root.val);
if(count>maxCount){
maxCount=count;
res.clear();
res.add(root.val);
}
pre=root;
searchDfs(root.right);
}
}