概述
目录
题目一:二叉树的最大深度
解法一:递归
解法二:迭代
题目二:二叉树的最小深度
解法一:递归
解法二:迭代
题目三:完全二叉树的节点个数
解法一:递归
解法二:迭代
题目一:二叉树的最大深度
力扣题目链接
题目描述:给定一个二叉树,找出其最大深度。
思路分析:(详情见代码随想录)
根节点的高度就是二叉树的最大深度,采用后序遍历
解法一:递归
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0; // 叶子节点的高度为一,空节点高度则为0
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
// 处理逻辑放在最后,可以把叶子节点的高度返回给它的父节点,进行加一操作,可得出父节点的高度
return Math.max(leftDepth, rightDepth) + 1;
}
}
解法二:迭代
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0;
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
int depth = 0;
while (!deque.isEmpty()) {
int size = deque.size();
depth++;
for (int i = 0; i < size; i++) {
TreeNode node = deque.poll();
if (node.left != null) deque.offer(node.left);
if (node.right != null) deque.offer(node.right);
}
}
return depth;
}
}
题目二:二叉树的最小深度
力扣题目链接
题目描述:给定一个二叉树,找出其最小深度
思路分析:
最小深度是从根节点到最近叶子节点的最短路径上的节点数量,找到最低点是解题关键
解法一:递归
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 rightDepth + 1;
}
// 当一个右子树为空,左不为空,这时并不是最低点
if (root.right == null) {
return leftDepth + 1;
}
// 左右节点都不为空
return Math.min(leftDepth, rightDepth) + 1;
}
}
解法二:迭代
class Solution {
public int minDepth(TreeNode root) {
if (root == null) return 0;
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
int depth = 0;
while (!deque.isEmpty()) {
int size = deque.size();
depth++;
for (int i = 0; i < size; i++) {
TreeNode node = deque.poll();
if (node.left == null && node.right == null) { // 叶子节点直接返回depth
return depth;
}
if (node.left != null) {
deque.offer(node.left);
}
if (node.right != null) {
deque.offer(node.right);
}
}
}
return depth;
}
}
题目三:完全二叉树的节点个数
力扣题目链接
题目描述:给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
思路分析:(视频指路)
先搞清楚完全二叉树的定义,采用递归法、迭代法解题即可
解法一:递归
// 精简版
class Solution {
public int countNodes(TreeNode root) {
if (root == null) return 0;
return countNodes(root.left) + countNodes(root.right) + 1;
}
}
解法二:迭代
class Solution {
public int countNodes(TreeNode root) {
if (root == null) return 0;
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
int res = 0;
while (!deque.isEmpty()) {
int size = deque.size();
while (size > 0) {
TreeNode cur = deque.poll();
res++;
if (cur.left != null) deque.offer(cur.left);
if (cur.right != null) deque.offer(cur.right);
size--;
}
}
return res;
}
}
最后
以上就是潇洒小蘑菇为你收集整理的代码随想录训练营day16的全部内容,希望文章能够帮你解决代码随想录训练营day16所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复