Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. struct Node
  2. {
  3.     int Data;
  4.     Node *Left, *Right;
  5.  
  6.     Node(int data, Node *left = NULL, Node *right = NULL) : Data(data), Left(left), Right(right) {}
  7. };
  8.  
  9. class Solution
  10. {
  11. public:
  12.     int GetWidth(Node *root)
  13.     {
  14.         _heightMem.clear();
  15.  
  16.         return GetWidthHelper(root);
  17.     }
  18.  
  19. private:
  20.     unordered_map<Node *, int> _heightMem;
  21.  
  22.    
  23.  
  24.     int GetHeight(Node *root)
  25.     {
  26.         if (root == NULL)
  27.             return 0;
  28.  
  29.         auto findRes = _heightMem.find(root);
  30.         if (findRes != _heightMem.end())
  31.             return findRes->second;
  32.  
  33.         int res = max(GetHeight(root->Left), GetHeight(root->Right)) + 1;
  34.         _heightMem[root] = res;
  35.  
  36.         return res;
  37.     }
  38.  
  39.     int GetWidthHelper(Node *root)
  40.     {
  41.         if (root == NULL)
  42.             return 0;
  43.  
  44.         int leftWidth = GetWidthHelper(root->Left);
  45.         int rightWidth = GetWidthHelper(root->Right);
  46.         int rootWidth = GetHeight(root->Left) + GetHeight(root->Right) + 1;
  47.  
  48.         return max(max(leftWidth, rightWidth), rootWidth);
  49.     }
  50. };
  51.  
  52.  
  53.  
  54. int _tmain(int argc, _TCHAR* argv[])
  55. {
  56.     Node node3 = Node(3);
  57.     Node node2 = Node(2, &node3, NULL);
  58.     Node node4 = Node(4);
  59.     Node node1 = Node(1, &node2, &node4);
  60.  
  61.     Solution s;
  62.  
  63.     assert(s.GetWidth(NULL) == 0);
  64.     assert(s.GetWidth(&node1) == 4);
  65.    
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement