对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。
给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。
思路:一、把二叉树的值转换成字符串 二、查找字符串a是否包含子串b,用strA.find(strB) != string:npos
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class IdenticalTree {
public:
bool chkIdentical(TreeNode* A, TreeNode* B) {
string stringA,stringB;
To_string(A,stringA);
To_string(B,stringB);
std::size_t found = stringA.find(stringB);
if (found!=std::string::npos) // 没找到--返回string::npos
return true;
return false;
}
void To_string(TreeNode *root, string &str){
if(root==NULL){
str += "#";
return;
}
/*ostringstream os; //构造一个输出字符串流,流内容为空
os << root->val; //向输出字符串流中输出int整数i的内容
str += os.str();//利用字符串流的str函数获取流中的内容*/
str += to_string(root->val);
To_string(root->left,str);
To_string(root->right,str);
}
};