zoukankan      html  css  js  c++  java
  • 【数据结构】算法 Maximum Width of Binary Tree 二叉树最大宽度

    Maximum Width of Binary Tree 二叉树最大宽度

    二叉树的宽度:

    每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。

    输入:A = [3,4,5,1,2], B = [4,1]
    输出:true输入: 
    
               1
             /   
            3     2
           /        
          5   3     9 
    
    输出: 4
    解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。
     
    

    思路

    利用层序遍历的方式,记录节点和序号。

    将每层的最右节点序号r - 最左节点的序号l。

    递归

    public class TwoTuple<A,B> {
            public final A first;
    
            public final B second;
    
            public TwoTuple(A a, B b){
                first = a;
                second = b;
            }
        }
        public int widthOfBinaryTree(TreeNode root) {
    
            LinkedList<TwoTuple<TreeNode, Integer>> q = new LinkedList<>();
            q.offer(new TwoTuple<>(root,0));
            int ans = 0;
            while (!q.isEmpty()){
                int cnt = q.size();
                int l = q.peekFirst().second;
                int r=0;
                for (int i = 0; i < cnt; i++) {
                    TwoTuple<TreeNode, Integer> temp = q.peek();
                    r = temp.second -l;
                    if(temp.first.left!=null){
                        q.offer(new TwoTuple<>(temp.first.left,r*2));
                    }
                    if(temp.first.right!=null){
                        q.offer(new TwoTuple<>(temp.first.right,r*2+1));
                    }
                    q.poll();
                }
                ans = Math.max(ans,r+1);
            }
    
            return ans;
        }
    
    

    Tag

    tree

  • 相关阅读:
    解决哈希(HASH)冲突的主要方法
    破解
    打工
    [JSOI2007]麻将
    [JSOI2007]建筑抢修
    [HAOI2007]上升序列
    [HAOI2007]覆盖问题
    [CQOI2017]小Q的棋盘
    [HEOI2015]兔子与樱花
    [HEOI2015]定价
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14670909.html
Copyright © 2011-2022 走看看