1. 程式人生 > 其它 >leetcode 對稱二叉樹 簡單

leetcode 對稱二叉樹 簡單

遞迴:兩個對稱的節點同時走即可。

迭代:用佇列,每一次 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)) return
false; // 一個為 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; } };