【算法】代码随想录训练营Day16打卡,leetcode 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
104.二叉树的最大深度
力扣链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
其实最大深度就是我们把层序遍历改一下,那我们先来看一看层序遍历怎么实现。
那么层序遍历我们遍历的时候,还有一个遍历每一层,然后每一层都分别将子节点入列的一个操作,
那么我们就可以用一个count,在每一次遍历每一层的时候就+1,当我们到最后一层,没有子节点的时候,队列里也没有数了,那么我们就结束循环,返回count就是他的最大深度了
解法
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
let max = 0;
let queue = [];
if(!root) return max;
queue.push(root);
while(queue.length){
let len = queue.length;
for(let i=0;i<len;i++){
let node = queue.shift();
node.left && queue.push(node.left);
node.right && queue.push(node.right);
}
max++
}
return max;
};
二叉树的最小深度
力扣链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree/
这道题我们可以参考一下上一道题 最大深度,根据题意,叶节点的结算位置,在于他的左右节点都是null的时候,就是一个叶节点,那么我们用最大深度的思路用层序遍历,用一个count来计算层数,当我们每一层来遍历节点的时候,都判断一下这个节点是否为叶节点,遇到第一个叶节点一定就是深度最小的节点,直接return
解法
层序遍历
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
let min = 0;
if(!root) return min;
let queue = [root];
while(queue.length){
let len = queue.length;
min++;
for(let i = 0; i < len; i++){
let node = queue.shift();
node.left && queue.push(node.left);
node.right && queue.push(node.right);
if(!node.left && !node.right ) return min;
}
}
};
101. 完全二叉树的节点个数
力扣链接:https://leetcode.cn/problems/symmetric-tree/description/
首先我们得理解完全二叉树,如果不理解的请看这篇
https://blog.csdn.net/YuZzz1/article/details/128700970
这道题同样用层序遍历或者前序,后续都ok,
我们还是用层序遍历最方便
题解
**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var countNodes = function(root) {
let nodeNums = 0;
if(!root) return nodeNums;
let queue = [root];
while(queue.length){
let len = queue.length;
for(let i=0;i<len;i++){
let node = queue.shift();
node.left && queue.push(node.left);
node.right && queue.push(node.right);
nodeNums++
}
}
return nodeNums;
};