美文网首页
662. Maximum Width of Binary Tre

662. Maximum Width of Binary Tre

作者: larrymusk | 来源:发表于2017-12-02 13:59 被阅读0次

    给定二叉树,求二叉树的最大宽度。二叉树某层的宽度是指其最左非空节点与最右非空节点之间的跨度。

    解题思路:
    二叉树层次遍历

    对二叉树节点进行标号,根节点标号为1;若某节点标号为c,则其左右孩子标号分别为2c, 2c + 1

    某层的宽度即为最右、最左节点标号之差+1

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
    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;
    }
    };

    相关文章

      网友评论

          本文标题:662. Maximum Width of Binary Tre

          本文链接:https://www.haomeiwen.com/subject/evjnbxtx.html