给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
借助递归把问题拆分
1+左子树的最大深度+右子树的最大深度 的最大值
1.空树,深度为0
2.只有一个根节点,没有左右子树,深度1
3.1 + max(左子树的深度+右子树的深度)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth);
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
if(root.left == null && root.right == null){
return 1;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth);
}
}
我发现,两个代码的差别在这个地方
if(root.left == null && root.right == null){
return 1;
}
加不加都可以通过,只是多递归少递归一次的概念
这道题和求二叉树结点的个数类似
public static int size(Node root){
if (root == null){
return 0;
}
//不是空树
return 1 + size(root.left) + size(root.right);
}
都是大事化小的过程



被折叠的 条评论
为什么被折叠?



