代码随想录算法训练营第十六天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
104.二叉树的最大深度
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
题解:层序遍历,遍历一层树的深度加一。
代码:
class Solution {
public int maxDepth(TreeNode root) {
int res=0;
if(root==null) return res;
Queue<TreeNode> que=new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int len=que.size();
while(len>0){
TreeNode node=que.poll();
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
len--;
}
res+=1;
}
return res;
}
}
559.N叉树的最大深度
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:3
题解:就是n叉树的层序遍历,记录一下遍历过多少层就可以。
代码:
class Solution {
public int maxDepth(Node root) {
int res=0;
if(root==null) return res;
Queue<Node> que=new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int len=que.size();
res++;
while(len>0){
Node node=que.poll();
List<Node> cnode=node.children;
if(cnode!=null){
for(Node n:cnode){
if(n!=null){
que.offer(n);
}
}
}
len--;
}
}
return res;
}
}
111.二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
**说明:**叶子节点是指没有子节点的节点。
示例 1:
题解:层序遍历。需要注意的是,当遇到第一个叶子节点后后就直接返回,不要break,不然它只退出了内层循环,外层循环还在继续。
代码:
class Solution {
public int minDepth(TreeNode root) {
int res=0;
if(root==null) return res;
Queue<TreeNode> que=new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int len=que.size();
res+=1;
while(len>0){
TreeNode node=que.poll();
if(node.left==null && node.right==null) {
return res;
}
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
len--;
}
}
return res;
}
}
222.完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
层,则该层包含 1~ 2h
个节点。
示例 1:
输入:root = [1,2,3,4,5,6]
输出:6
题解:层序遍历,遍历到一个节点结果就加一。
代码:
class Solution {
public int countNodes(TreeNode root) {
int res=0;
if(root==null) return res;
Queue<TreeNode> que=new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int len=que.size();
while(len>0){
TreeNode node=que.poll();
res++;
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
len--;
}
}
return res;
}
}