1
0

Tree.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // Created by 李洋 on 2023/8/14.
  3. //
  4. #ifndef LEECODE_C_TREE_H
  5. #define LEECODE_C_TREE_H
  6. struct TreeNode {
  7. int val;
  8. TreeNode *left;
  9. TreeNode *right;
  10. TreeNode() : val(0), left(nullptr), right(nullptr) {}
  11. TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  12. TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  13. };
  14. #include <iostream>
  15. #include <random>
  16. #include <queue>
  17. TreeNode *creatRandomTree(int size) {
  18. if (size == 0) {
  19. return nullptr;
  20. }
  21. std::random_device rd;
  22. std::mt19937 gen(rd());
  23. std::uniform_int_distribution<int> dis(1, 100);
  24. std::queue<int> Q;
  25. std::queue<TreeNode *> T;
  26. for (int i = size; i > 0; --i) {
  27. Q.push(dis(gen));
  28. std::cout << Q.back() << " ";
  29. }
  30. std::cout << std::endl;
  31. TreeNode *head = new TreeNode(Q.front());
  32. T.push(head);
  33. Q.pop();
  34. while (!Q.empty()) {
  35. if (T.front()->left != nullptr && T.front()->right != nullptr) {
  36. T.pop();
  37. }
  38. TreeNode *temp = new TreeNode(Q.front());
  39. Q.pop();
  40. if (T.front()->left == nullptr) {
  41. T.front()->left = temp;
  42. T.push(temp);
  43. continue;
  44. }
  45. if (T.front()->right == nullptr) {
  46. T.front()->right = temp;
  47. T.push(temp);
  48. }
  49. }
  50. return head;
  51. }
  52. #endif //LEECODE_C_TREE_H
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。