目录
530.二叉搜索树的最小绝对差
class Solution {
int ans,pre;//Pre保存前驱节点的值
public int getMinimumDifference(TreeNode root) {
ans = Integer.MAX_VALUE;
pre = -1;//提示中说明节点值的范围是[0,105],所以初始化为-1
midOrder(root);
return ans;
}
void midOrder(TreeNode root){
if(root == null){
return;
}
midOrder(root.left);
if(pre == -1){
pre = root.val;
}else{
ans = Math.min(ans, root.val - pre);
pre = root.val;
}
midOrder(root.right);
}
}
230.二叉搜索树中第K小的元素
class Solution {
public int kthSmallest(TreeNode root, int k) {
Deque<TreeNode> stack = new ArrayDeque<TreeNode>();
while(root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);//先把根存进去,然后先找左子树
root = root.left;//左 根 右,持续进栈根节点,直到找到最左的节点
}
//循环结束条件是root为空,证明上一个root没有左节点,出栈
root = stack.pop();
--k;//遍历到一个数减一次
if(k == 0){
break;
}
root = root.right;//往节点右子树找了
}
return root.val;
}
}
98.验证二叉搜索树
class Solution {
public boolean isValidBST(TreeNode root) {
double pre = -Double.MAX_VALUE;;
Deque<TreeNode> stack = new ArrayDeque<TreeNode>();
while(root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);
root = root.left;
}
root = stack.pop();
if(root.val <= pre){//=也不符合二叉搜索树的要求
return false;//不满足
}
pre = root.val;
root = root.right;
}
return true;
}
}