给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2
提示:
- 树中节点的数量在
[0, 104]
区间内。 -100 <= Node.val <= 100
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
Deque<TreeNode> que = new ArrayDeque<>();
que.offer(root);
int count = 0;
while (!que.isEmpty()){
int n = que.size();
for (int i = 0; i < n; i++) {
TreeNode poll = que.poll();
if(poll.left!=null) que.offer(poll.left);
if(poll.right!=null) que.offer(poll.right);
}
count++;
}
return count;
}
}
class Solution {
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
int leftDepth = maxDepth(root.left)+1;
int rightDepth = maxDepth(root.right)+1;
int depth = Math.max(leftDepth,rightDepth);
return depth;
}
}
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
class Solution {
public int minDepth(TreeNode root) {
if(root==null){
return 0;
}
int depth = 0;
int leftDepth = minDepth(root.left)+1;
int rightDepth = minDepth(root.right)+1;
if(root.left == null){
return rightDepth;
}
if(root.right == null){
return leftDepth;
}
depth = Math.min(leftDepth,rightDepth);
return depth;
}
}
class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
Deque<TreeNode> que = new ArrayDeque<>();
que.offer(root);
int count = 0;
while (!que.isEmpty()){
int n = que.size();
count++;
for (int i = 0; i < n; i++) {
TreeNode poll = que.poll();
if(poll.right==null&&poll.left==null) return count;
if(poll.left!=null) que.offer(poll.left);
if(poll.right!=null) que.offer(poll.right);
}
}
return count;
}
}
给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
层,则该层包含 1~ 2h
个节点。
class Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
int left = countNodes(root.left);
int right = countNodes(root.right);
int ans = left+right+1;
return ans;
}
}
lass Solution {
public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
Deque<TreeNode> que = new ArrayDeque<>();
que.offer(root);
int count = 0;
while (!que.isEmpty()){
int n = que.size();
for (int i = 0; i < n; i++) {
TreeNode poll = que.poll();
if(poll.left!=null) que.offer(poll.left);
if(poll.right!=null) que.offer(poll.right);
}
count+=n;
}
return count;
}
}