104.二叉树的最大深度
后序遍历:
class Solution {
public int maxDepth(TreeNode root) {
// 如果当前节点为空,深度为0
if (root == null) {
return 0;
}
// 递归计算左子树的最大深度
int leftDepth = maxDepth(root.left);
// 递归计算右子树的最大深度
int rightDepth = maxDepth(root.right);
// 当前节点的深度为左右子树最大深度 + 1(加上当前节点这一层)
return Math.max(leftDepth, rightDepth) + 1;
}
}
注意深度是指节点数,因此要+1,不+1算出来的是高度。
559.n叉树的最大深度
class Solution {
public int maxDepth(Node root) {
if(root == null) return 0;
int depth = 0;
if(root.children != null){
for(Node child : root.children){
depth=Math.max(depth, maxDepth(child));
}
}
return depth+1;
}
}
-
111.二叉树的最小深度
和最大深度有所不同,如果只是把最大深度的代码copy过来,将max改为min的话,实例2:[2,null,3,null,4,null,5,null,6] 无法测试通过。
class Solution {
/**
* 递归法,相比求MaxDepth要复杂点
* 因为最小深度是从根节点到最近**叶子节点**的最短路径上的节点数量
*/
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = minDepth(root.left);
int rightDepth = minDepth(root.right);
if (root.left == null) {
return rightDepth + 1;
}
if (root.right == null) {
return leftDepth + 1;
}
// 左右结点都不为null
return Math.min(leftDepth, rightDepth) + 1;
}
}
-
222.完全二叉树的节点个数
和求深度的题非常类似
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
int leftNum = countNodes(root.left);
int rightNum = countNodes(root.right);
return leftNum + rightNum +1;
}
}