【算法】代码随想录训练营Day16打卡,leetcode 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

【算法】代码随想录训练营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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值