Advertisement
SalmaYasser

Untitled

Jan 13th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. bool idx_exist (int idx , TreeNode * root, int d)
  12. {
  13. int l = 1, r = pow (2,d);
  14. bool res = true;
  15. for (int i = 0 ; i < d; i ++)
  16. {
  17. int mid = l + (r - l) / 2;
  18.  
  19. if (idx <= mid)
  20. {
  21. root = root -> left;
  22. r = mid - 1;
  23. }
  24. else
  25. {
  26. root = root -> right;
  27. l = mid + 1;
  28. }
  29. }
  30. if (root == nullptr)
  31. res = false;
  32. return res;
  33. }
  34. int find_depth (TreeNode* root)
  35. {
  36. int d = 0;
  37.  
  38. while (root -> left)
  39. {
  40. d++;
  41. root = root -> left;
  42. }
  43.  
  44. return d;
  45. }
  46. public:
  47. int countNodes(TreeNode* root) {
  48.  
  49. if (root == nullptr)
  50. return 0;
  51.  
  52. int depth = 0 ;
  53. depth = find_depth (root);
  54.  
  55. if (depth == 0)
  56. return 1;
  57.  
  58. int last_level = 0, l = 1, r = pow (2, depth);
  59. int mid ;
  60. int res;
  61. while (l <= r)
  62. {
  63. mid = l + (r - l) / 2;
  64.  
  65. if (idx_exist (mid , root , depth))
  66. {
  67. res = mid;
  68. l = mid + 1;
  69. }
  70. else
  71. {
  72. r = mid - 1;
  73. }
  74.  
  75. }
  76.  
  77. return res + ( (int) pow (2, depth) - 1);
  78. }
  79. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement