1.二叉树的最大深度
1.1解答

public int maxDepth(TreeNode root) {return root==null?0:Math.max(maxDepth(root.left),maxDepth(root.right))+1;}
2.验证二叉搜索树

前置知识:
中序遍历实现:
//使用中序遍历,获取整个树中的所有键public Queue<Key> midErgodic(){Queue<Key> keys = new Queue<>();midErgodic(root,keys);return keys;}//使用中序遍历,把指定树x中的所有键放入到keys队列中private void midErgodic(Node x,Queue<Key> keys){if (x==null){return;}//1.找到当前结点的左子树,如果不为空,递归遍历左子树if (x.left!=null){midErgodic(x.left,keys);}//2.把当前结点的key放入到队列中;keys.enqueue(x.key);//3.找到当前结点的右子树,如果不为空,递归遍历右子树if (x.right!=null){midErgodic(x.right,keys);}}
2.1递归实现√
public boolean isValidBST(TreeNode root) {return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);}public boolean isValidBST(TreeNode root, long minVal, long maxVal) {if (root == null)return true;//每个节点如果超过这个范围,直接返回falseif (root.val >= maxVal || root.val <= minVal)return false;//这里再分别以左右两个子节点分别判断,//左子树范围的最小值是minVal,最大值是当前节点的值,也就是root的值,因为左子树的值要比当前节点小//右子数范围的最大值是maxVal,最小值是当前节点的值,也就是root的值,因为右子树的值要比当前节点大return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);}
2.2中序遍历实现√
class Solution {//前一个结点,全局的TreeNode prev;public boolean isValidBST(TreeNode root) {if (root == null)return true;//访问左子树if (!isValidBST(root.left))return false;//访问当前节点:如果当前节点小于等于中序遍历的前一个节点直接返回false。if (prev != null && prev.val >= root.val)return false;prev = root;//访问右子树if (!isValidBST(root.right))return false;return true;}}
