二叉树的最小高度,最大高度(深度)和宽度

最大高度

function getMaxHeight(root){
    if(root == null) return 0;

    return 1 + Math.max(getMaxHeight(root.left),getMaxHeight(root.right));
}

最小高度

function getMinHeigth(root){
    if(!root) return 0;
    return 1 + Math.min(getMinHeight(root.left),getMinHeight(root.right));
}

二叉树宽度

递归方法

function getMaxWidth(root){
    if(root == null) return 0;
    if(root.left == null && root.right == null) return 1;

    return getMaxWidth(root.left) + getMaxWdith(root.right);
}

非递归方法求二叉树的高度和宽度

复制代码
//使用层次遍历,求最大高度和最大宽度
function getMaxSize(root){
    let queue = [root];
    let width = 0;
    let height = 0;
    while(queue.length){
        let levelSize = queue.length;
        width = Math.max(levelSize,width);
        height++;

        while(levelSize--){
            let node = queue.shift();
            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
        }
    }

    return [width,height];
}
复制代码

还有一种在每行末尾添加null的方式,虽然不及上面的简洁,但是思路值得肯定

复制代码
function bfs(root){
    if(!root) return;

    //第一行先在末尾加个null
    let queue = [root,null];
    let deep = 0;

    //rows可以记录每行的宽度
    let rows = [];

    while(queue.length){
        let node = queue.shift();
        //为null表示本行结束
        if(node == null){
            deep++;

            //本行结束,下一行的node已经push完毕,在此处加null,就是在下一行的末尾加null
            //queue的长度若为0,则说明最后一行,无需再加null
            if(queue.length) queue.push(null);
        }
        else{
            rows[deep] = ~~rows[deep] + 1;
            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
        }
    }
    return deep;
}
复制代码

 

posted @   全玉  阅读(5158)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示