Tree.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. {
  8. int val;
  9. TreeNode *left;
  10. TreeNode *right;
  11. TreeNode() : val(0), left(nullptr), right(nullptr) {}
  12. TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  13. TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  14. };
  15. #include <iostream>
  16. #include <random>
  17. #include <queue>
  18. TreeNode *createRandomTree(int size)
  19. {
  20. if (size == 0)
  21. {
  22. return nullptr;
  23. }
  24. std::random_device rd;
  25. std::mt19937 gen(rd());
  26. std::uniform_int_distribution<int> dis(1, 100);
  27. std::queue<int> Q;
  28. std::queue<TreeNode *> T;
  29. for (int i = size; i > 0; --i)
  30. {
  31. Q.push(dis(gen));
  32. std::cout << Q.back() << " ";
  33. }
  34. std::cout << std::endl;
  35. TreeNode *head = new TreeNode(Q.front());
  36. T.push(head);
  37. Q.pop();
  38. while (!Q.empty())
  39. {
  40. if (T.front()->left != nullptr && T.front()->right != nullptr)
  41. {
  42. T.pop();
  43. }
  44. TreeNode *temp = new TreeNode(Q.front());
  45. Q.pop();
  46. if (T.front()->left == nullptr)
  47. {
  48. T.front()->left = temp;
  49. T.push(temp);
  50. continue;
  51. }
  52. if (T.front()->right == nullptr)
  53. {
  54. T.front()->right = temp;
  55. T.push(temp);
  56. }
  57. }
  58. return head;
  59. }
  60. void lookTree(TreeNode *root)
  61. {
  62. std::queue<TreeNode *> q;
  63. q.push(root);
  64. while (!q.empty())
  65. {
  66. TreeNode *head = q.front();
  67. q.pop();
  68. std::cout << head->val << " ";
  69. if (head->left)
  70. {
  71. q.push(head->left);
  72. }
  73. if (head->right)
  74. {
  75. q.push(head->right);
  76. }
  77. }
  78. }
  79. #endif // LEECODE_C_TREE_H
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。