题目链接:https://leetcode-cn.com/problems/subtree-of-another-tree/
思路如下:
首先利用后序遍历的方式对 root
和 subRoot
两棵二叉树进行序列化,分别得到 rootStr
和 subStr
两个字符串,然后判断 subStr
是否是 rootStr
的子串即可。
C++代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
string rootStr, subStr;
postSerialize(root, rootStr);
postSerialize(subRoot, subStr);
return rootStr.find(subStr) != -1;
}
private:
// 利用后序遍历的方式进行序列化
void postSerialize(TreeNode* node, string& s) {
if (node->left == nullptr) {
s += "#|";
} else {
postSerialize(node->left, s);
}
if (node->right == nullptr) {
s += "#|";
} else {
postSerialize(node->right, s);
}
s += to_string(node->val);
s += "|";
}
};