Timeline
Timeline
2025-10-23
init
Binary Tree
Problem:
Recursion, symmetric comparison
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0) , left(nullptr) , right(nullptr) { } TreeNode(int x) : val(x) , left(nullptr) , right(nullptr) { } TreeNode(int x, TreeNode *left, TreeNode *right) : val(x) , left(left) , right(right) { }};class Solution { public: bool isSame(TreeNode *left, TreeNode *right) { if (left != nullptr && right != nullptr && right->val == left->val) { return isSame(left->right, right->left) && isSame(left->left, right->right); } else if (left == nullptr && right == nullptr) { return true; } else { return false; } } bool isSymmetric(TreeNode *root) { if (root == nullptr) { return true; } return isSame(root->left, root->right); }}; |
Non-recursive approach, iterative, enqueue nodes twice
12345678910111213141516171819202122232425262728293031323334 | using std::queue;class Solution {public: bool isSymmetric(TreeNode* root) { TreeNode *left, *right; if (root == nullptr) return true; queue<TreeNode*> que; que.push(root->left); que.push(root->right); while (!que.empty()) { left = que.front(); que.pop(); right = que.front(); que.pop(); if (left == nullptr && right == nullptr) continue; if (left == nullptr || right == nullptr) return false; if (left->val != right->val) return false; // Note the symmetric enqueue order here que.push(left->left); que.push(right->right); que.push(left->right); que.push(right->left); } return true; }}; |
leetcode hot 100 rewrite
1234567891011121314151617181920212223 | class Solution { private: bool isSame(TreeNode *p, TreeNode *q) { if ((p && !q) || (!p && q)) return false; if (!p && !q) return true; if (p->val == q->val) return isSame(p->left, q->right) && isSame(p->right, q->left); else return false; } public: bool isSymmetric(TreeNode *root) { // root is not null return isSame(root->left, root->right); }}; |
