码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 662. Maximum Width of Binary Tree

时间:2020-07-10 09:54:38      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:i++   blank   func   solution   target   dex   queue   remove   href   

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.

二叉树的最大宽度。题意是给一个结构近似于满二叉树的二叉树,请你返回他的最大宽度是多少。

思路是BFS宽度优先搜索。做法是像level order traversal那样遍历树的每一个节点。在需要一个queue来存储遍历到的node的同时,需要另一个linked list来记录每个node的index。这里有一个结论需要记住,如果一个节点的index为i的话,他的左孩子的index是2 * i,他的右孩子的index是2 * i + 1。这个结论可以帮助规避中间有空节点的情况。

时间O(n)

空间O(n)

Java实现

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public int widthOfBinaryTree(TreeNode root) {
12         // corner case
13         if (root == null) {
14             return 0;
15         }
16 
17         // normal case
18         Queue<TreeNode> queue = new LinkedList<>();
19         LinkedList<Integer> list = new LinkedList<>();
20         int res = 1;
21         queue.offer(root);
22         list.add(1);
23         while (!queue.isEmpty()) {
24             int count = queue.size();
25             for (int i = 0; i < count; i++) {
26                 TreeNode cur = queue.poll();
27                 int curIndex = list.removeFirst();
28                 if (cur.left != null) {
29                     queue.offer(cur.left);
30                     list.offer(curIndex * 2);
31                 }
32                 if (cur.right != null) {
33                     queue.offer(cur.right);
34                     list.offer(curIndex * 2 + 1);
35                 }
36             }
37             if (list.size() >= 2) {
38                 res = Math.max(res, list.peekLast() - list.peekFirst() + 1);
39             }
40         }
41         return res;
42     }
43 }

 

LeetCode 题目总结

[LeetCode] 662. Maximum Width of Binary Tree

标签:i++   blank   func   solution   target   dex   queue   remove   href   

原文地址:https://www.cnblogs.com/cnoodle/p/13277353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!