1.二叉树的最大深度
求给定二叉树的最大深度,
深度是指树的根节点到任一叶子节点路径上节点的数量。
最大深度是所有叶子节点的深度的最大值。
(注:叶子节点是指没有子节点的节点。)
数据范围:0 \le n \le 1000000≤n≤100000,树上每个节点的val满足 |val| \le 100∣val∣≤100
要求: 时间复杂度 O(n)O(n)
题解:二叉树的深度=max(左子树深度,右子树深度) +1
递归求子树的深度,当子树为null时,递归结束return 0;
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 depth(TreeNode r)
{
if(r==null)
return 0;
return Math.max(depth(r.left),depth(r.right))+1;
}
public int maxDepth (TreeNode root) {
// write code here
return depth(root);
}
}
2. 二叉树中和为某一值的路径(一)
描述
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
题解,只需要遍历这棵树,当到达叶子节点时判断是否路径值是否等于sum
可以使用递归完成,首先 当节点为空return false,当一个节点的左子树和右子树都为空说明 是叶子节点,叶子节点的路径值等于sum 则return true,最后只需判断叶子节点是否有true, 有 答案为true,否则为false.
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.left==null&&root.right==null&&sum==root.val)
return true;
return hasPathSum(root.left,sum-root.val)||hasPathSum(root.right,sum-root.val);
}
}
3.