給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。
兩棵樹重複是指它們具有相同的結構以及相同的結點值。
示例 1:
1
/ \2 3
/ / \
4 2 4
/4
下面是兩個重複的子樹:
2
/4
和
4
因此,你需要以列表的形式返回上述重複子樹的根結點。
我的思路:
把每個子樹化為字串存入map裡,如果發現有重複字串,也就是有重複子樹,就把這個重複子樹加入結果集中。
**:
class solution
mapmp;//map字串集
dfs(root, ans, mp);//遞迴,深度優先
return ans;
} string dfs(treenode* root, vector&ans, map&mp)
string temp = to_string(root->val) + dfs(root->left, ans, mp) + dfs(root->right, ans, mp);//找到子樹左右節點的字串
if (mp[temp] == 1)//判斷之前有沒有出現重複子串,如果等於2或以上就說明之前已經計算過了
mp[temp]++;//該字串出現次數加一
return temp;
}};
leetcode652 尋找重複的子樹
題目 給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。示例 1 1 23 424 4下面是兩個重複的子樹 2 4和 4因此,你需要以列表的形式返回上述重複子樹的根結點。思路 這裡採用的是string來儲...
LeetCode 652 尋找重複的子樹
給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。示例 1 1 2 3 4 2 4 4 下面是兩個重複的子樹 2 4和 4 因此,你需要以列表的形式返回上述重複子樹的根結點。先對整棵樹進行序列化,然後對每...
leetcode 652 尋找重複的子樹
給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重複是指它們具有相同的結構以及相同的結點值。首先是進行序列化,然後序列化的過程中,進行樹的深度優先搜尋,在樹的搜尋過程中,進行乙個結果的統計。畢竟樹的深度優先訪問的時間負雜度是 n 的。class ...