代码随想录算法刷题训练营day16:LeetCode(104)二叉树的最大深度 、LeetCode(559)n叉树的最大深度、LeetCode(111)二叉树的最小深度、LeetCode(222)完全二叉树的节点个数
LeetCode(104)二叉树的最大深度
题目
代码
/**
* 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) {
//通过递归去做---传入的是根节点,可以求根节点的高度来代替深度
//先求左右子树的高度+1即为根节点的高度----确定遍历方式为左右根
//采用递归,先判断终止条件
if(root==null){
return 0;
}
//不为空,先求左子树的高度
int heightLeft=maxDepth(root.left);
//再求右子树的高度
int heightRight=maxDepth(root.right);
int heightRoot;//定义根节点的高度
if(heightLeft>heightRight){
heightRoot=heightLeft+1;
}else{
heightRoot=heightRight+1;
}
return heightRoot;
}
}
LeetCode(559)n叉树的最大深度
题目
代码
// @lc code=start
/*
// 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 maxheight=0;
List<Node> childrens=root.children;
//遍历集合
for (Node children : childrens) {
int tempHeight=maxDepth(children);
if(tempHeight>maxheight){
maxheight=tempHeight;//找出所有子树中节点最高的树
}
}
return maxheight+1;
}
}
LeetCode(111)二叉树的最小深度
题目
代码
// @lc code=start
/**
* 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;
}
int rootHeight;
//同样用后续遍历去做
if(root.left==null){
rootHeight=minDepth(root.right)+1;
return rootHeight;
}
if(root.right==null){
rootHeight=minDepth(root.left)+1;
return rootHeight;
}
int leftHeight=minDepth(root.left);
int rightHeight=minDepth(root.right);
if(leftHeight<rightHeight){
rootHeight=leftHeight+1;
}else{
rootHeight=rightHeight+1;
}
return rootHeight;
}
LeetCode(222)完全二叉树的节点个数
题目
代码
// @lc code=start
/**
* 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 {
int number=0;
public int countNodes(TreeNode root) {
if(root==null){
return 0;
}
int leftCountNodes=countNodes(root.left);
int rightCountNodes=countNodes(root.right);
int countSum=leftCountNodes+rightCountNodes+1;//常规遍历方法
return countSum;
}
}