104.二叉树的最大深度
求深度:前序遍历,中左右
求高度:后序遍历,左右中;根节点的高度就是二叉树的最大深度
递归:左子树的高度和右子树的高度的最大值+1即为根节点的高度;中就是处理的过程
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1+Math.max(leftDepth,rightDepth);
}
}
559.n叉树的最大深度
class Solution {
public int maxDepth(Node root) {
if(root==null){
return 0;
}
int max = 0;
List<Node> children = root.children;
if(children != null){
for(Node child:children){
max = Math.max(max,maxDepth(child));
}
}
return max+1;
}
}
111.二叉树的最小深度
递归法:若左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。若右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。若左右子树都不为空,返回左右子树深度最小值 + 1 。
class Solution {
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 1+rightDepth;
}
if(root.right == null){
return 1+leftDepth;
}
return Math.min(leftDepth,rightDepth)+1;
}
}
222.完全二叉树的节点个数
1. 通用递归解法
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return res;
}
return countNodes(root.left)+countNodes(root.right)+1;
}
}
2.针对完全二叉树的递归解法:
满二叉树的节点数:2^depth-1;
<< : 左移n位,相当于乘2^n。
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
int leftDepth = getDepth(root.left);
int rightDepth = getDepth(root.right);
if(leftDepth==rightDepth){//满二叉树
return (1<<leftDepth)+countNodes(root.right);
} else {
return countNodes(root.left)+countNodes(root.right)+1;
}
}
private int getDepth(TreeNode node){
int depth = 0;
while(node!=null){
node = node.left;
depth++;
}
return depth;
}
}