LeetCode 652 尋找重複的子樹

2021-09-26 15:56:50 字數 855 閱讀 8812

給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。

兩棵樹重複是指它們具有相同的結構以及相同的結點值。

示例 1:

1

/ \2   3

/   / \

4   2   4

/4

下面是兩個重複的子樹:

2

/4

4

因此,你需要以列表的形式返回上述重複子樹的根結點。

?     

先對整棵樹進行序列化,然後對每一子部分都進行雜湊,如果出現了兩次的部分就加入答案容器ans中。
class solution 

string res = to_string(root -> val);

string left = dfs(root -> left);

string right = dfs(root -> right);

res = res + ',' + left + ',' + right;

hash[res]++;

if (hash[res] == 2) ans.push_back(root); // 注意這裡不能是 hash[res] >= 2 因為 hash[res] 可能重複出現3次,那樣的話就會把乙個重複出現的子結構加入答案陣列兩次,造成重複。

return res;

}vectorfindduplicatesubtrees(treenode* root)

};

leetcode652 尋找重複的子樹

題目 給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。示例 1 1 23 424 4下面是兩個重複的子樹 2 4和 4因此,你需要以列表的形式返回上述重複子樹的根結點。思路 這裡採用的是string來儲...

leetcode 652 尋找重複的子樹

給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。首先是進行序列化,然後序列化的過程中,進行樹的深度優先搜尋,在樹的搜尋過程中,進行乙個結果的統計。畢竟樹的深度優先訪問的時間負雜度是 n 的。class ...

LeetCode 652 尋找重複的子樹

給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。示例 1 1 2 3 4 2 4 4下面是兩個重複的子樹 2 4和 4因此,你需要以列表的形式返回上述重複子樹的根結點。我的思路 把每個子樹化為字串存入m...