leetcode 對稱二叉樹 簡單
阿新 • • 發佈:2021-08-05
遞迴:兩個對稱的節點同時走即可。
迭代:用佇列,每一次 push 兩個節點,這兩個節點是對稱的!
// 遞迴 class Solution { public: bool isSymmetric(TreeNode* root) { return _isSymmetric(root, root); } bool _isSymmetric(TreeNode *node1, TreeNode *node2) { if(node1 == nullptr || node2 == nullptr) { return node1 == node2; }if(node1 -> val != node2 -> val) return false; bool res = _isSymmetric(node1 -> left, node2 -> right); res &= _isSymmetric(node1 -> right, node2 -> left); return res; } };
// 迭代 class Solution { public: bool isSymmetric(TreeNode* root) {if(!root) return false; queue<TreeNode *> que; que.push(root -> left); que.push(root -> right); while(!que.empty()) { // 取出的 p 和 q 是對稱點 auto p = que.front(); que.pop(); auto q = que.front(); que.pop(); if((!p && q) || (p && !q)) returnfalse; // 一個為 nullptr, 另一個不為 nullptr if(!p) continue; // 兩個都為 nullptr if(p -> val != q -> val) return false; que.push(p -> left); que.push(q -> right); que.push(p -> right); que.push(q -> left); } return true; } };