leetcode 662. 二叉树最大宽度

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。

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

示例 1:

输入:

1
/ \
3 2
/ \ \
5 3 9

输出: 4
解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。
示例 2:

输入:

1
/
3
/ \
5 3

输出: 2
解释: 最大值出现在树的第 3 层,宽度为 2 (5,3)。
示例 3:

输入:

1
/ \
3 2
/
5

输出: 2
解释: 最大值出现在树的第 2 层,宽度为 2 (3,2)。
示例 4:

输入:

1
/ \
3 2
/ \
5 9
/ \
6 7
输出: 8
解释: 最大值出现在树的第 4 层,宽度为 8 (6,null,null,null,null,null,null,7)。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-width-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

采用层序遍历,每次遍历都记录一下当前节点的索引位置。用last -first就是所求。

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int widthOfBinaryTree(TreeNode root) {
        LinkedList<TreeNode> a = new LinkedList<>();
        LinkedList<Integer> a1 = new LinkedList<>();
        LinkedList<TreeNode> b = new LinkedList<>();
        LinkedList<Integer> b1 = new LinkedList<>();
        a.add(root);
        a1.add(0);
        int max = 1;
        while (!a.isEmpty()) {
            while (!a.isEmpty()) {
                TreeNode poll = a.poll();
                int index = a1.poll();
                if (poll.left != null) {
                    b.add(poll.left);
                    b1.add((index << 1));
                }
                if (poll.right != null) {
                    b.add(poll.right);
                    b1.add((index << 1) + 1);
                }
            }
            if (!b.isEmpty()) {
                max = Math.max(max, b1.getLast() - b1.getFirst() + 1);
            }
            a = b;
            a1 = b1;
            b = new LinkedList<>();
            b1 = new LinkedList<>();
        }
        return max;
    }
}

posted @ 2021-05-12 13:56  旺仔古李  阅读(61)  评论(0编辑  收藏  举报