mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-08-06 09:29:56 +08:00
2.0 KiB
2.0 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;
}
};