一、今日刷题
1. 第七部分:二叉树 – 111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
答案代码:
自己的思路:参考昨天做的寻找最大深度,借鉴层次遍历的代码进行稍加改动。
只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点
package BinaryTree;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author: LYZ
* @date: 2022/2/23 13:42
* @description: 111. 二叉树的最小深度
*/
public class MinDepth {
public static void main(String[] args) {
TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(3), new TreeNode(4)), new TreeNode(2, new TreeNode(4), new TreeNode(3)));
MinDepth minDepth = new MinDepth();
int ans = minDepth.minDepth(root);
System.out.println(ans);
}
public int minDepth(TreeNode root) {
int ans = 0;
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
ans += 1;
for (int i = 1; i <= size; i++) {
TreeNode node = queue.poll();
if (node.left == null && node.right == null) {
return ans;
}
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}
return ans;
}
}
2. 第七部分:二叉树 – 222. 完全二叉树的节点个数
答案代码:
自己的思路:依然借鉴层次遍历,每次节点出队列时计数器 ans 加1。
package BinaryTree;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author: LYZ
* @date: 2022/2/23 14:43
* @description: 222. 完全二叉树的节点个数
*/
public class CountNodes {
public static void main(String[] args) {
TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(3), new TreeNode(4)), new TreeNode(2, new TreeNode(4), new TreeNode(3)));
CountNodes countNodes = new CountNodes();
int ans = countNodes.countNodes(root);
System.out.println(ans);
}
public int countNodes(TreeNode root) {
int ans = 0;
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 1; i <= size; i++) {
ans += 1;
TreeNode node = queue.poll();
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}
return ans;
}
}