昨天已经做过了
104.二叉树的最大深度
题目链接
https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
题目描述
思路
每遍历一层,深度就加一,所以最大深度就是二叉树的层数
/**
* 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 maxDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue = new LinkedList<>();
int depthest = 0;
if(root!=null) queue.add(root);
while (!queue.isEmpty()){
int size = queue.size();
while (size-->0){
TreeNode node = queue.remove();
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
depthest++;
}
return depthest;
}
}
559.n叉树的最大深度
题目链接
https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/description/
题目描述
思路
与二叉树的最大深度一样,只是孩子变多了
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public int maxDepth(Node root) {
if(root==null) return 0;
int depth = 0;
Queue<Node> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
depth++;
int size = queue.size();
while (size-->0){
Node node = queue.remove();
List<Node> children = node.children;
for (int i = 0; i < children.size(); i++) {
if(children.get(i)!=null){
queue.add(children.get(i));
}
}
}
}
return depth;
}
}
111.二叉树的最小深度
题目链接
https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
题目描述
思路
只要遇到左右孩子均为空,就返回深度,即为最小深度
/**
* 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 minDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue = new LinkedList<>();
int depth = 0;
queue.add(root);
while (!queue.isEmpty()){
depth++;
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.remove();
if(cur.left==null&&cur.right==null) return depth;
if(cur.left!=null) queue.add(cur.left);
if(cur.right!=null) queue.add(cur.right);
}
}
return depth;
}
}
222.完全二叉树的节点个数
题目链接
https://leetcode.cn/problems/count-complete-tree-nodes/description/
题目描述
思路
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) {
//统计总结点的个数
int sum = 0;
if(root==null) return 0;
//使用层序遍历
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
int size = queue.size();
while (size-->0){
TreeNode node = queue.remove();
sum++;
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
}
return sum;
}
}
2、递归
/**
* 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) {
if(root==null) return 0;
return countNodes(root.left) + countNodes(root.right) + 1;
}
}
总结
今天的题在昨天的题上边的变种,还行,很快就完成了,耶耶耶耶耶!!!!!