Leetcode 初级算法 - 树
原始地址:https://github.com/jerrylususu/leetcode-easy
二级标题格式:[章节内题号] [题库内题号] [题目标题]
1 104 二叉树的最大深度
我的思路:直接递归 注意下 base case
public int maxDepth(TreeNode root) {
if(root==null) return 0;
if(root.left==null && root.right==null) return 1;
if(root.left==null) return maxDepth(root.right)+1;
else if(root.right==null) return maxDepth(root.left)+1;
else return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
其他思路:递归可以写的更简单一点
// source: https://leetcode.com/problems/maximum-depth-of-binary-tree/solution/
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
} else {
int left_height = maxDepth(root.left);
int right_height = maxDepth(root.right);
return java.lang.Math.max(left_height, right_height) + 1;
}
}
}
也可以用DFS+栈来实现 初始层记录为深度1 越往底部深度增加
2 98 验证二叉搜索树
我的思路:中序遍历是否满足递增
先写了一个很糟糕的版本 用 list 存储中序遍历结果(因为不想写非递归做法)
public boolean isValidBST(TreeNode root) {
LinkedList<Integer> li = new LinkedList<>();
if(root==null) return true;
inOrderTraversal(root,li);
int i = li.pollFirst();
while(li.size()>0){
if(!(i<li.peekFirst())){
return false;
} else {
i=li.pollFirst();
}
}
return true;
}
public static void inOrderTraversal(TreeNode root,List<Integer> li){
if(root.left!=null) inOrderTraversal(root.left,li);
li.add(root