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).
思路:
层次遍历,然后每一个结点对应一个标号,每一层的宽度用最右边的标号-最左边标号即可。
int widthOfBinaryTree(TreeNode* root) { if( root == NULL ) return 0; queue< TreeNode* > qu; map< TreeNode*, int > mp; qu.push( root ); int maxW = 0xc0c0c0c0; int numL = -1, numR = -1; while( !qu.empty() ) { int n = qu.size(); for( int i = 0; i < n; i++ ) { TreeNode* tmp = qu.front(); qu.pop(); if( i == 0 ) { numL = mp[tmp]; } if( i == n-1 ) { numR = mp[tmp]; } if( tmp->left != NULL ) { qu.push( tmp->left ); mp[tmp->left] = mp[tmp] * 2; } if( tmp->right != NULL ) { qu.push( tmp->right ); mp[tmp->right] = mp[tmp] * 2 + 1; } } maxW = max( maxW, numR - numL + 1 ); } return maxW; }
时间: 2024-10-06 17:16:29