Files
leetcode-master/problems/0572.另一个树的子树.md
youngyangyang04 4314ed6021 Update
2020-11-30 11:00:08 +08:00

2.1 KiB

判断二叉树是否对称,是否相等,是否对称,都是一个套路

C++代码

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

    }
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if (s == NULL) return false;
        if (compare(s, t)) return true;
        if(isSubtree(s->left, t)) return true;
        if (isSubtree(s->right, t)) return true;
        return false;
    }
};
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p == NULL && q == NULL) return true;
        if (p == NULL || q == NULL) return false;
        queue<TreeNode*> que;
        que.push(p);   //
        que.push(q);  //
        while (!que.empty()) {  //
            TreeNode* leftNode = que.front(); que.pop();
            TreeNode* rightNode = que.front(); que.pop();
            if (!leftNode && !rightNode) {  //
                continue;
            }
            if ((!leftNode || !rightNode || (leftNode->val != rightNode->val))) {
                return false;
            }
            que.push(leftNode->left);   //
            que.push(rightNode->left); //
            que.push(leftNode->right);  //
            que.push(rightNode->right);  //
        }
        return true;
    }

    bool isSubtree(TreeNode* s, TreeNode* t) {
        stack<TreeNode*> st;
        vector<int> result;
        if (s == NULL) return false;
        st.push(s);
        while (!st.empty()) {
            TreeNode* node = st.top();                       // 中
            st.pop();
            if(isSameTree(node, t)) return true;
            if (node->right) st.push(node->right);           // 右(空节点不入栈)
            if (node->left) st.push(node->left);             // 左(空节点不入栈)
        }
        return false;
    }
};