题:给出两棵二叉树,判断一颗是不是另一颗的子树
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include <sstream>
using namespace std;
class Solution {
private:
stringstream ss1,ss2;
void preorderedTree(TreeNode* node,stringstream& s){
if(node==nullptr)s<<" n";
else{
s<<' '<<(node->val);
preorderedTree(node->left,s);
preorderedTree(node->right,s);
}
}
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
preorderedTree(s,ss1);
ss1<<' e';
preorderedTree(t,ss2);
return ss1.str().find(ss2.str())!=ss1.str().npos;
}
};
注意点:
①每次往stringsream里塞入结点value时要用空格隔开,否则若输入[12],[2]会返回true。
②null结点也要输入stringstream,否则若输入[4,1,2,0],[4,1,2]会返回true。
③string.find(str)!=string.npos才能判定str是否在string中。