LeetCode 101 Symmetric Tree

135 阅读1分钟

LeetCode 101 Symmetric Tree

思路

递归

递归很好写

迭代

一开始我没有想到用队列去存储节点。其实,如果要以一层一层的顺序去考虑树,那么一般情况下使用队列。如果要优先考虑左子树或者右子树,一般用stack存储节点。

代码

递归

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (!root) return true;
        
        return isSymmetric(root->left, root->right);
    }
    
    bool isSymmetric(TreeNode *left, TreeNode* right) {
        if (!left && !right) return true;
        else if (left && right && left->val == right->val) {
            return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
        }
        else return false;
    }
};

迭代

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (!root) return true;
        
        queue<TreeNode*> qu;
        TreeNode *left, *right;
        qu.push(root->left);
        qu.push(root->right);
        
        while (!qu.empty()) {
            left = qu.front();
            qu.pop();
            right = qu.front();
            qu.pop();
            
            if (!left && !right) continue;
            else if (left && right && left->val == right->val) {
                qu.push(left->left);
                qu.push(right->right);
                qu.push(left->right);
                qu.push(right->left);
            }
            else return false;
        }
        
        return true;
    }
    
};