Advertisement
Guest User

All Possible Full Binary Trees

a guest
Nov 19th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 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. public:
  12.  
  13.  
  14. TreeNode* deep_copy(TreeNode* root)
  15. {
  16. if (root == nullptr)
  17. return nullptr;
  18.  
  19. TreeNode* n_root = new TreeNode(0);
  20. n_root -> left = deep_copy (root -> left);
  21. n_root -> right = deep_copy (root -> right);
  22.  
  23. return n_root;
  24.  
  25. }
  26. vector<TreeNode*> allPossibleFBT(int N) {
  27.  
  28. vector< TreeNode*> res;
  29. if (N == 1)
  30. {
  31. TreeNode *n_node = new TreeNode(0);
  32. return {n_node};
  33. }
  34. if (N % 2 == 0)
  35. {
  36. return {};
  37. }
  38.  
  39. for (int cur_root = 2 ; cur_root <= N ; cur_root += 2)
  40. {
  41. vector <TreeNode*> ls = allPossibleFBT (cur_root - 1);
  42. vector <TreeNode*> rs = allPossibleFBT (N - cur_root);
  43.  
  44. for (int l_idx = 0 ; l_idx < ls.size(); l_idx++)
  45. {
  46. for (int r_idx = 0 ; r_idx < rs.size(); r_idx++)
  47. {
  48. TreeNode *n_node = new TreeNode(0);
  49.  
  50. TreeNode *n_left = (r_idx == rs.size() - 1) ? ls[l_idx] : deep_copy (ls[l_idx]);
  51. TreeNode *n_right = (l_idx == ls.size() - 1) ? rs[r_idx] : deep_copy (rs[r_idx]);
  52.  
  53. n_node -> left = n_left;
  54. n_node -> right = n_right;
  55.  
  56. res.push_back (n_node);
  57.  
  58. }
  59. }
  60. }
  61. return res;
  62.  
  63. }
  64. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement