树的同构:我理解的同构应该是树若干个结点平行交换形成与原树结构相同的树。但看到网上的一些实现都是认为树的同构必须是树的先序遍历是相同的。先贴上自己的代码。
/* 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) { // write code here if(A==NULL||B==NULL) { return false; } string s1; string s2; s1=toTranslate(A); s2=toTranslate(B); if(string::npos!=s1.find(s2))return true; return false; } string toTranslate(TreeNode *A) { if(A==NULL)return "#!"; string s; s=to_string(A->val)+"!"; s+=toTranslate(A->left); s+=toTranslate(A->right); return s; } };
bool chkIdentical(TreeNode* A, TreeNode* B)
上面的函数就是比较A中是否存在一棵同构于B的子树。其实程序的结构为:对A、B分别进行先序遍历,求得其先序遍历序列。然后利用string类型的find()函数查找s1序列中是否囊括s2序列,由此判断出A中是否存在一棵同构于B的子树。记录一下几个知识点:
先序遍历:即某节点---->左子树----->右子树。采用递归来遍历输出先序序列。
string.find()函数:
string中 find()的应用 (rfind() 类似,只是从反向查找)
原型如下:
(1)size_t find (const string& str, size_t pos = 0) const; //查找对象--string类对象
(2)size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串
(3)size_t find (const char* s, size_t pos, size_t n) const; //查找对象--字符串的前n个字符
(4)size_t find (char c, size_t pos = 0) const; //查找对象--字符
结果:找到 -- 返回 第一个字符的索引
没找到--返回 string::npos
to_string():将整型数转化为string类型的。
热门文章
- 「12月9日」最高速度22.4M/S,2024年Nekoray每天更新免费节点订阅链接
- 数据库四大特性与隔离级别
- 「1月27日」最高速度18.4M/S,2025年Nekoray每天更新免费节点订阅链接
- 宠物美容师大概多少钱一个月(宠物美容师月薪多少)
- 宠物狗疫苗可以自己打吗多少钱啊(宠物狗疫苗可以自己打吗多少钱啊一次)
- 「1月5日」最高速度22.7M/S,2025年Nekoray每天更新免费节点订阅链接
- 「11月20日」最高速度19.2M/S,2024年Nekoray每天更新免费节点订阅链接
- 【Azure Developer】使用 CURL 获取 Key Vault 中 Secrets 中的值
- 「1月26日」最高速度18.5M/S,2025年Nekoray每天更新免费节点订阅链接
- 「11月18日」最高速度21.6M/S,2024年Nekoray每天更新免费节点订阅链接