题解 | #二叉树的最大宽度#

二叉树的最大宽度

http://www.nowcoder.com/practice/0975d62a307549cea32f353f354a7377

思路:本题乍一看可以用层序遍历?但是涉及到空节点的问题,层序遍历存在诸多麻烦,因此可以利用二叉树的特性:左叶子节点的序号为根节点的两倍,右叶子节点的序号为根节点的2倍加1.利用这个性质,我们把每一层的最左节点的序号加入一个map中(这个动作只进行一次即可),以后每次遍历到该层的时候,刷新该层的最大节点数即可。

public class Solution {
    int res = 0;
    Map<Integer, Integer> levelRecord = new HashMap<>();
    public int widthOfBinaryTree (TreeNode root) {
        if(root==null)return 0;
        dfs(root,0,0);
        return res;
    }
    public void dfs(TreeNode root,int depth,int index){
        if(root==null)return;
        if(levelRecord.get(depth)==null)levelRecord.put(depth,index);
        res = Math.max(res,index - levelRecord.get(depth)+1);
        dfs(root.left,depth+1,index*2);
        dfs(root.right,depth+1,index*2+1);
    }
}

全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
程序员牛肉:这一眼假啊,基本上都是骗人的,不然就涉及到职位贪腐了,就像之前华为的OD事件,看你运气好不好了
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务