1. 程式人生 > >leetcode662+求一棵樹的最大寬度,DFS

leetcode662+求一棵樹的最大寬度,DFS

https://leetcode.com/problems/maximum-width-of-binary-tree/description/

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
#define LL long long
    void dfs(TreeNode* r, int depth, LL cur_pos, vector<LL>& left, vector<LL>& right)
    {
        if(r==NULL) return;
        if(left.size()==depth) left.push_back(cur_pos);
        if(right.size()==depth) right.push_back(cur_pos);
        right[depth] = cur_pos;
        dfs(r->left, depth+1, cur_pos*2, left, right);
        dfs(r->right, depth+1, cur_pos*2+1, left, right);
    }
    int widthOfBinaryTree(TreeNode* root) {
        vector<LL> left, right;
        dfs(root, 0, 1, left, right);
        int n = min(left.size(), right.size());
        LL ans = 0;
        for(int i=0; i<n; i++){
            ans = max(ans, right[i]-left[i]+1);
        }
        return ans;
    }
};