fork download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. struct TreeNode {
  9. int val;
  10. TreeNode* left;
  11. TreeNode* right;
  12. TreeNode(int val) : val(val), left(nullptr), right(nullptr) {}
  13. };
  14.  
  15. bool isSame(TreeNode* p, TreeNode* q) {
  16. if (p == nullptr && q == nullptr) return true;
  17. if (p == nullptr || q == nullptr) return false;
  18. if (p->val != q->val) return false;
  19. return isSame(p->left, q->left) && isSame(p->right, q->right);
  20. }
  21.  
  22. TreeNode* buildTree() {
  23. string line;
  24. // Read lines, skipping accidental empty lines
  25. while (getline(cin, line)) {
  26. // Strip trailing carriage return if present
  27. if (!line.empty() && line.back() == '\r') {
  28. line.pop_back();
  29. }
  30. if (!line.empty()) break;
  31. }
  32. if (line.empty()) return nullptr;
  33.  
  34. stringstream ss(line);
  35. int x;
  36. if (!(ss >> x) || x == -1) return nullptr;
  37.  
  38. TreeNode* root = new TreeNode(x);
  39. queue<TreeNode*> q;
  40. q.push(root);
  41.  
  42. while (!q.empty()) {
  43. auto u = q.front();
  44. q.pop();
  45.  
  46. if (ss >> x && x != -1) {
  47. u->left = new TreeNode(x);
  48. q.push(u->left);
  49. }
  50.  
  51. if (ss >> x && x != -1) {
  52. u->right = new TreeNode(x);
  53. q.push(u->right);
  54. }
  55. }
  56. return root;
  57. }
  58.  
  59. int main() {
  60. TreeNode* p = buildTree();
  61. TreeNode* q = buildTree();
  62. cout << (isSame(p, q) ? "true" : "false") << "\n";
  63. return 0;
  64. }
Success #stdin #stdout 0s 5308KB
stdin
1 2 1
1 2 1
stdout
true