28.求二叉树最大深度
思路就是和层次遍历一样,只是不需要数组存对应的值,只要记录层数即可,还是用队列,时间复杂度和空间复杂度都是O(n)
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
// write code here
if(root==null) return 0;
Deque<TreeNode> q = new ArrayDeque<>();
q.offer(root);
int lay = 0;
while(!q.isEmpty()){
int count = q.size();//每一层的个数
while(count-- >0){
TreeNode node = q.poll();
if(node.left!=null) q.offer(node.left);
if(node.right!=null) q.offer(node.right);
}
lay++;
}
return lay;
}
}
第二种用递归的方法,树的深度=max(左子树深度,右子树深度)+1
代码十分简洁,时间复杂度和空间复杂度都是O(n)
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
// write code here
if(root==null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right))+1;
}
}
29. 二叉树中和为某一值的路径(一)
用递归判断,错了好几次,错在边界条件的判断,要注意两点:
- 路径一定是要到叶节点的,到中间某个节点相等也是不行的
- 数据包含负数,不能用val>sum作为返回false的边界条件
时间复杂度和空间复杂度都是O(N)
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
public boolean hasPathSum (TreeNode root, int sum) {
// write code here
if(root==null) return false;
if(root.val==sum){
//还没到叶节点就相等了也不行
if(root.left==null&&root.right==null) return true;
}
return hasPathSum(root.left, sum-root.val)||hasPathSum(root.right,sum-root.val);
}
}