LeetCode 104.二叉树的最大深度
题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
文章链接:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html
思路
* 二叉树的最大深度等于max{左子树的最大深度,右子树的最大深度} + 1
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
else {
int l = maxDepth(root.left);
int r = maxDepth(root.right);
return l > r ? l + 1 : r + 1;
}
}
扩展:n叉树的最大深度
/**
* n叉树的深度等于他子树中每一个孩子的最大深度+1
*/
public int maxDepth(Node root) {
if (root == null)
return 0;
int depth = 0;
for (int i = 0; i < root.children.size(); i++) {
depth = Math.max(depth, maxDepth(root.children.get(i)));
}
return depth + 1;
}
LeetCode 111.二叉树的最小深度
题目链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
文章链接:https://programmercarl.com/0111.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E6%B7%B1%E5%BA%A6.html
思路
* 但左右子树不为空的时候:二叉树的最大深度等于min{左子树的最小深度,右子树的最小深度} + 1
* 若左子树为空:右子树的最小深度+1
* 若右子树为空:左子树的最小深度+1
public int minDepth(TreeNode root) {
if (root == null)
return 0;
int l = minDepth(root.left);
int r = minDepth(root.right);
if (root.left == null)
return r + 1;
if (root.right == null)
return l + 1;
return Math.min(l, r) + 1;
}
LeetCode 222.完全二叉树的节点个数
题目链接:https://leetcode.cn/problems/count-complete-tree-nodes/description/
文章链接:https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%AA%E6%95%B0.html
public int countNodes(TreeNode root) {
if (root == null)
return 0;
return countNodes(root.left) + countNodes(root.right) + 1;
}