1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Solution { public: int widthOfBinaryTree(TreeNode* root) { if(!root) return 0; dfs(std::move(Node(root, 1)), 0); return ret; } private: unordered_map<int, int> left; int ret{ 1 }; struct Node { TreeNode* node; long pos; Node(TreeNode* node, int pos) : node(node), pos(pos) {} }; private: void dfs(Node node, int depth) { if(!left.count(depth)) left.emplace(depth, node.pos); else ret = max(ret, int(node.pos - left[depth]) + 1); if(node.node->left) dfs(std::move(Node(node.node->left, node.pos * 2)), depth + 1); if(node.node->right) dfs(std::move(Node(node.node->right, node.pos * 2 + 1)), depth + 1); } };
|