leetcode 652. 尋找重複的子樹 題解 java實現
阿新 • • 發佈:2021-02-10
力扣 652. 尋找重複的子樹 題解 java實現
給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。
兩棵樹重複是指它們具有相同的結構以及相同的結點值。
示例 1:
因此,你需要以列表的形式返回上述重複子樹的根結點。
思路
找到以當前節點的樹結構,然後存入HashMap裡面,順便記錄出現次數,當出現次數為1次的時候加入結果,找到當前根節點的樹結構用後序遍歷
class Solution {
List<TreeNode> res = new LinkedList <>();
//記錄次數
HashMap<String, Integer> map = new HashMap<>();
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
traverse(root);
return res;
}
public String traverse(TreeNode root){
//終止條件
if(root == null) return "#" ;
String left = traverse(root.left);
String right = traverse(root.right);
//後序遍歷可以得到根節點的樹結構
String sub = left + "," + right + "," + root.val;
//查找出現次數,沒有出現賦值為0
int i = map.getOrDefault(sub, 0);
//只有出現次數為1的時候才會放入結果
if(i == 1) res.add (root);
//次數加一
map.put(sub, i+1);
return sub;
}
}