c_cpp 652.查找重复的子树 - 2018.9.19
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 652.查找重复的子树 - 2018.9.19相关的知识,希望对你有一定的参考价值。
class Solution {
public:
// 构建标志字段
string generateSubTreeString(TreeNode *root, map<TreeNode*, string>& cacheMap) {
string re = "";
if (root == NULL) return re;
if (cacheMap[root].size() > 0)
return cacheMap[root];
re += to_string(root->val);
if (root->left == NULL
&& root->right == NULL) {
return re;
}
re += "(";
if (root->left != NULL) {
re += generateSubTreeString(root->left, cacheMap);
}
if (root->right != NULL) {
re += ",";
re += generateSubTreeString(root->right, cacheMap);
}
re += ")";
cacheMap[root] = re;
return re;
}
// 获取所有节点
void getAllNode(TreeNode* root, stack<TreeNode *>& tS) {
if (root == NULL) return;
tS.push(root);
getAllNode(root->left, tS);
getAllNode(root->right, tS);
}
vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
vector<TreeNode *> re;
map<TreeNode*, string> cacheMap;
map<string, int> sM;
stack<TreeNode *> tS;
getAllNode(root, tS);
TreeNode *curNode;
while (!tS.empty()) {
curNode = tS.top();
tS.pop();
string tmpS = generateSubTreeString(curNode, cacheMap);
if (tmpS.size() > 0) {
if (sM[tmpS] == 1) {
re.push_back(curNode);
}
sM[tmpS] += 1;
}
}
return re;
}
};
以上是关于c_cpp 652.查找重复的子树 - 2018.9.19的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 652.寻找重复的子树
每日一题652. 寻找重复的子树
LeetCode 652. 寻找重复的子树
[Leetcode]652.Find Duplicate Subtrees
LeetCode 1475. 商品折扣后的最终价格 / 687. 最长同值路径 / 652. 寻找重复的子树
LeetCode 1475. 商品折扣后的最终价格 / 687. 最长同值路径 / 652. 寻找重复的子树