目录
1、700. 二叉搜索树中的搜索
简简单单的迭代
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while(root != null)
{
if(root.val == val) return root;
if(root.val > val) root = root.left;
else root = root.right;
}
return null;
}
}
2、98. 验证二叉搜索树
二叉搜索树中序遍历是一个有序数组
class Solution {
TreeNode pre = null;
public boolean isValidBST(TreeNode root) {
boolean flag1 = true, flag2 = true;
if(root == null) return true;
if(root.left != null)
flag1 = isValidBST(root.left);
if(pre != null && pre.val >= root.val) return false;
pre = root;
if(root.right != null)
flag2 = isValidBST(root.right);
return flag1 && flag2;
}
}
3、530. 二叉搜索树的最小绝对差
和上一题思路类似
class Solution {
TreeNode pre = null;
int res = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
int res1 = Integer.MAX_VALUE;
if(root.left != null)
getMinimumDifference(root.left);
if(pre != null) res = Math.min(res,root.val - pre.val);
pre = root;
if(root.right != null)
getMinimumDifference(root.right);
return res;
}
}
4、501. 二叉搜索树中的众数
和上一题思路类似
class Solution {
TreeNode pre = null;
List<Integer> resList = new ArrayList<>();
int count = 0;
int maxCnt = 0;
public int[] findMode(TreeNode root) {
//resList.add(root.val);
traversal(root);
int[] res = new int[resList.size()];
for(int i = 0; i < resList.size(); ++i)
res[i] = resList.get(i);
return res;
}
public void traversal(TreeNode root) {
if(root.left != null)
traversal(root.left);
if(pre == null || root.val != pre.val) count = 1;
else ++count;
pre = root;
if(count > maxCnt)
{
resList.clear();
resList.add(root.val);
maxCnt = count;
}
else if(count == maxCnt) resList.add(root.val);
if(root.right != null)
traversal(root.right);
}
}