662. Maximum Width of Binary Tree
Posted wentiliangkaihua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了662. Maximum Width of Binary Tree相关的知识,希望对你有一定的参考价值。
Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null.
The width of one level is defined as the length between the end-nodes (the leftmost and right most non-null nodes in the level, where the null
nodes between the end-nodes are also counted into the length calculation.
Example 1:
Input: 1 / 3 2 / 5 3 9 Output: 4 Explanation: The maximum width existing in the third level with the length 4 (5,3,null,9).
Example 2:
Input: 1 / 3 / 5 3 Output: 2 Explanation: The maximum width existing in the third level with the length 2 (5,3).
Example 3:
Input: 1 / 3 2 / 5 Output: 2 Explanation: The maximum width existing in the second level with the length 2 (3,2).
Example 4:
Input: 1 / 3 2 / 5 9 / 6 7 Output: 8 Explanation:The maximum width existing in the fourth level with the length 8 (6,null,null,null,null,null,null,7).
Note: Answer will in the range of 32-bit signed integer.
class Solution { private int max = 1; public int widthOfBinaryTree(TreeNode root) { if (root == null) return 0; List<Integer> startOfLevel = new LinkedList<>(); helper(root, 0, 1, startOfLevel); return max; } public void helper(TreeNode root, int level, int index, List<Integer> list) { if (root == null) return; if (level == list.size()){ list.add(index); //System.out.println(level+" " +list.toString()); } max = Math.max(max, index + 1 - list.get(level)); //System.out.println(max); helper(root.left, level + 1, index * 2, list); helper(root.right, level + 1, index * 2 + 1, list); } }
width of binary tree是指最大的(一层里面最右-最左的index+1)。而二叉树可以描述成数组,节点i的两个孩子的节点分别为2*i和2*i + 1,上面答案的意思是
用一个list把每一层的leftmost的index存起来,具体:如果当前root不为null,而且level == list.size( ),这意味着我们到了新的一层,而且这层的leftmost就是当前节点,我们把它存进list中
然后与当前max作比较并更新,如果是新的max,那一定会是index + 1 - list.get(level),其中list.get(level)是当前的leftmost的index,由于新传入了index,所以可能会出现新max,我们比较就行了
然后继续向下dfs,root.left的index是当前index*2,root.right的index是当前index * 2 + 1。
这类层层的问题似乎都有list.get(heght), 在level order traversal里变成了res.get(height).add(node)
以上是关于662. Maximum Width of Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 662. Maximum Width of Binary Tree
LeetCode-662.Maximum Width of Binary Tree
662. Maximum Width of Binary Tree二叉树的最大宽度