1. 程式人生 > 其它 >英語時態語法系列筆記:一般現在時(一)

英語時態語法系列筆記:一般現在時(一)

題目


給你一個二叉樹的根節點 root , 檢查它是否軸對稱。

示例1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true

示例2:
輸入:root = [1,2,2,null,3,null,3]
輸出:false

解題思路


//遞迴法
class Solution {
public:
    bool check(TreeNode *left, TreeNode *right) {
        if(!left&&!right)return true;       //如果左子樹和右子樹非空,返回true
        if (!left || !right) return false;  //如果只有一個是空,返回false
        if(left->val!=right->val)return false;//如果左子樹的值不等於右子樹的值,返回false'
        return check(left->left, right->right) && check(left->right, right->left);//遞迴檢查左子樹的對稱性和右子樹的對稱性
    }

    bool isSymmetric(TreeNode* root) {
        return check(root, root);
    }
};
//迭代:用佇列模擬遞迴
class Solution {
public:
    bool check(TreeNode *u, TreeNode *v) {
        queue <TreeNode*> q;
        q.push(u); q.push(v);
        while (!q.empty()) {
            u = q.front(); q.pop();
            v = q.front(); q.pop();
            if (!u && !v) continue;
            if ((!u || !v) || (u->val != v->val)) return false;

            q.push(u->left); 
            q.push(v->right);

            q.push(u->right); 
            q.push(v->left);
        }
        return true;
    }

    bool isSymmetric(TreeNode* root) {
        return check(root, root);
    }
};