力扣104:二叉树的最大深度
题目链接:力扣104:二叉树的最大深度
思路:
1.采用递归法(后序遍历)
2.确定递归参数
3.确定终止条件
4.确定每层逻辑
代码:
class Solution {
public int maxDepth(TreeNode root) {
// 采用递归法(后序遍历)
// 1.确定递归参数
// 2.确定终止条件
if (root == null) {
return 0;
}
// 3.确定每层逻辑
int leftHeight = maxDepth(root.left);
int rightHeight = maxDepth(root.right);
int maxDepth = 1 + Math.max(leftHeight, rightHeight);
return maxDepth;
}
}
力扣111:二叉树的最小深度
题目链接:力扣111:二叉树的最小深度
思路:
1.采用递归法(后序遍历)
2.确定递归参数
3.确定终止条件
4.确定每层逻辑
代码:
class Solution {
public int minDepth(TreeNode root) {
// 采用递归法(后序遍历)
// 1.确定递归参数
// 2.确定终止条件
if (root == null) {
return 0;
}
// 3.确定每层逻辑
int leftHeight = minDepth(root.left);
int rightHeight = minDepth(root.right);
if (root.left == null && root.right != null) {
return 1 + rightHeight;
}
if (root.right == null && root.left != null) {
return 1 + leftHeight;
}
return 1 + Math.min(leftHeight, rightHeight);
}
}
力扣222:完全二叉树的节点个数
题目链接:力扣222:完全二叉树的节点个数
思路:
1.完全二叉树,检测左右节点的外侧深度是否相同,如果相同,则根据公式2的深度次方-1即可得出子节点个数
2.确定递归参数
3.确定终止条件
4.确定递归每层逻辑(后序遍历,定义两个指针,分别指向左右节点,然后计算左右节点的深度,如果深度相等直接根据公式计算,不相等就递归遍历当前节点的左右节点并加1返回给当前节点)
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int countNodes(TreeNode root) {
// 1.完全二叉树,检测左右节点的外侧深度是否相同,如果相同,则根据公式2的深度次方-1即可得出子节点个数
// 2.确定递归参数
// 3.确定终止条件
if (root == null) {
return 0;
}
// 4.确定递归每层逻辑
// 后序遍历
// 定义两个指针,分别指向左右节点,然后计算左右节点的深度
TreeNode left = root.left;
TreeNode right = root.right;
int leftDepth = 0, rightDepth = 0;
while (left != null) {
leftDepth++;
left = left.left;
}
while (right != null) {
rightDepth++;
right = right.right;
}
if (leftDepth == rightDepth) {
return (2 << leftDepth) - 1;
}
return countNodes(root.left) + countNodes(root.right) + 1;
}
}